[STM32F1] const数组长度

[复制链接]
4791|10
 楼主| 墨羽谨年 发表于 2014-1-17 16:26 | 显示全部楼层 |阅读模式
在使用STM32做开发,代码中,我定义了一个 const类型数组,用存放数据,现在为了程序的便捷,我想求这个数组的长度,不知道该如何操作。

我有试过这样的代码:

u32 Get_Array_Len (u8* array)
{
        return(sizeof(array) / sizeof(array[0]));
}


但是会出现错误提示:Error[Pe167]: argument of type "char const *" is incompatible with parameter of type "u8 *" D:\CleanRobot\code\IAR\test1\HardWare\timer\hw_timer.c 51 。之后我试过将函数的形参改为void但是也不行。

希望有人能帮我解决这个问题或者给我些提示,谢谢了。



cosxpeach 发表于 2014-1-17 16:54 | 显示全部楼层
array只是个指针,何来数组。
所以你用(sizeof(array)是有问题的。
想求const数组长度直接sizeof(数组名就行)。
const char test[50];
_len = sizeof(test);
wookongbun 发表于 2014-1-17 20:46 | 显示全部楼层
array是一个指针,所以不能用来求array指向的内存的长度。

另外传递给array对应的实参是"char const *"类,而array是"u8 *"类,
带const修饰符的指针是不能给不带const修饰符的指针赋值的。反过来到可以。

只是为了编译通过的话,修改为u32 Get_Array_Len (const u8* array)就可以。
dirtwillfly 发表于 2014-1-17 21:39 | 显示全部楼层
建议楼主翻翻C语言课本
yanwenbin33 发表于 2014-1-21 18:18 | 显示全部楼层
数组跟指针虽然有区别,但是在作为函数参数时是完全等价的(参考《C专家编程》),问题在于你定义的形参和传入的实参类型不一致;别指望char temp和char const temp是一样的;他们的差别就像int temp和char temp的差别等级一样不可用。
 楼主| 墨羽谨年 发表于 2014-1-22 11:25 | 显示全部楼层
yanwenbin33 发表于 2014-1-21 18:18
数组跟指针虽然有区别,但是在作为函数参数时是完全等价的(参考《C专家编程》),问题在于你定义的形参和 ...

嗯,我试着将形参改为 const char *但是结果是我程序能通过编译,但是运行却不正常了。
所以蛮困惑的,我该怎么求一个const类型数组的长度呢?
yanwenbin33 发表于 2014-2-1 11:37 | 显示全部楼层
墨羽谨年 发表于 2014-1-22 11:25
嗯,我试着将形参改为 const char *但是结果是我程序能通过编译,但是运行却不正常了。
所以蛮困惑的,我 ...

我没写程序去验证怎么求const数组的长度;因为在我看来这是没意义的事情:因为你要定义const无非就是要这个数组在整个程序过程都是不可变的,那么你应该在定义它的时候长度就已经定下来了。是我,我会直接define这个数组的长度;何必让编译器(这个是常量,如果是变量就是cpu)多运行一行代码呢?个人愚见。。。。。。。。。。另外,新年快乐。。。。。。。。。。。。
msblast 发表于 2014-2-2 09:27 | 显示全部楼层
sizeof是个操作符,在预编译的时候计算,也就是说在预编译的时候sizeof的参数值都已经确定下来了,即sizeof的参数对编译器来说是个常量。
msblast 发表于 2014-2-2 09:50 | 显示全部楼层
cosxpeach 发表于 2014-1-17 16:54
array只是个指针,何来数组。
所以你用(sizeof(array)是有问题的。
想求const数组长度直接sizeof(数组名就 ...

2#的方法符合LZ的要求,LZ却视而不见。。。
迅雷不及掩耳 发表于 2014-2-5 19:24 | 显示全部楼层
加个强制类型转试试
香水橙 发表于 2014-2-7 09:59 | 显示全部楼层
sizeof()看起来像个函数,但实际上是一个伪函数,只在编译阶段起作用;只能接受运行时不可改变的实体作为参数,楼主要求在运行过程中计算结果,不能使用sizeof()。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

110

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部