sizeof()函数测量常量数组的长度的问题

如果我定义的数组是用 code 关键字定义的:

code unsigned int arr[]={1,2,3,4};

为什么这样的数组使用sizeof(arr) 检测长度的时候返回是0 ?用keil c51编译器编译的时候警告,实际运行也是返回0。
是否不可以检测常量数组的长度?
code 关键字是 单片机编程将常量数组储存到ROM空间的关键字。

看来你是单片机C语言编程了

sizeof(arr); arr是一个指针,获取到的是指针的字节数,在c中是4

在单片机中从来没有用过sizeof取得数组的长度

一般来说,单片机中数组长度都是固定的,编写者都知道了长度,没必要多此一举取长度

不过你确实要获取长度,可以自己写个函数来获取,并且数组定义方法要改改
比如你给的例子,定义成
code unsigned int arr[]={1,2,3,4,9999};
那么获取长度的函数检测到9999就可以了,这是数组长度就出来了

我只是提供思路,你可以再考虑考虑,希望帮你解决了问题追问

是单片机编程,但是我的表格很大,并且这样自己数出来长度的话程序不够通用。

追答

如果你的数据值不是很大,可以像我这样定义试试
code unsigned int arr[]={1,2,3,4,9999};
检测长度的函数
int len(unsigned int* arr)
{
int len = 0;
while(1)
{
if(arr[len++] == 9999) break;
}
return len-1;
}
主要的我映像中单片机 c里没有提供 获取数组长度的函数,只好自己定义了,你可以试试这中方法
也可以再找找相关资料

我找到一点资料,有种方法你可以试试看行不行: (sizeof(arr) / sizeof(arr[0]) 获取长度
在vc上是可以的,不知道keil c51成不成

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-05
定义数组是用 code 关键字定义的
这句话是什么意思呢?
sizeof 返回数组的大小是没有问题的啊,记住是大小不是长度。本回答被网友采纳
第2个回答  2012-07-10
可以检测的 估计返回的检测方法有问题追问

我实际上试过,没有用 code关键字定义的数组是没有警告的,返回也正确。

相似回答