打印
[STM32F1]

const数组长度

[复制链接]
4131|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语言课本

使用特权

评论回复
5
yanwenbin33| | 2014-1-21 18:18 | 只看该作者
数组跟指针虽然有区别,但是在作为函数参数时是完全等价的(参考《C专家编程》),问题在于你定义的形参和传入的实参类型不一致;别指望char temp和char const temp是一样的;他们的差别就像int temp和char temp的差别等级一样不可用。

使用特权

评论回复
6
墨羽谨年|  楼主 | 2014-1-22 11:25 | 只看该作者
yanwenbin33 发表于 2014-1-21 18:18
数组跟指针虽然有区别,但是在作为函数参数时是完全等价的(参考《C专家编程》),问题在于你定义的形参和 ...

嗯,我试着将形参改为 const char *但是结果是我程序能通过编译,但是运行却不正常了。
所以蛮困惑的,我该怎么求一个const类型数组的长度呢?

使用特权

评论回复
7
yanwenbin33| | 2014-2-1 11:37 | 只看该作者
墨羽谨年 发表于 2014-1-22 11:25
嗯,我试着将形参改为 const char *但是结果是我程序能通过编译,但是运行却不正常了。
所以蛮困惑的,我 ...

我没写程序去验证怎么求const数组的长度;因为在我看来这是没意义的事情:因为你要定义const无非就是要这个数组在整个程序过程都是不可变的,那么你应该在定义它的时候长度就已经定下来了。是我,我会直接define这个数组的长度;何必让编译器(这个是常量,如果是变量就是cpu)多运行一行代码呢?个人愚见。。。。。。。。。。另外,新年快乐。。。。。。。。。。。。

使用特权

评论回复
8
msblast| | 2014-2-2 09:27 | 只看该作者
sizeof是个操作符,在预编译的时候计算,也就是说在预编译的时候sizeof的参数值都已经确定下来了,即sizeof的参数对编译器来说是个常量。

使用特权

评论回复
9
msblast| | 2014-2-2 09:50 | 只看该作者
cosxpeach 发表于 2014-1-17 16:54
array只是个指针,何来数组。
所以你用(sizeof(array)是有问题的。
想求const数组长度直接sizeof(数组名就 ...

2#的方法符合LZ的要求,LZ却视而不见。。。

使用特权

评论回复
10
迅雷不及掩耳| | 2014-2-5 19:24 | 只看该作者
加个强制类型转试试

使用特权

评论回复
11
香水橙| | 2014-2-7 09:59 | 只看该作者
sizeof()看起来像个函数,但实际上是一个伪函数,只在编译阶段起作用;只能接受运行时不可改变的实体作为参数,楼主要求在运行过程中计算结果,不能使用sizeof()。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

110

帖子

2

粉丝