说明:程序编译环境Keil uVision5
本来想用sizeof计算一个数组的大小,于是建立了一个file1.c文件,并在file1.c有如下程序:
/********** Code Start **************/
int intArray[ ] = {2,3,4}; //因为此数组的长度可能会加长,所以并没有指定数组长度
unsigned char ucCalc_VarSize(void)
{
unsigned char ucSize = 0; //定义一个局部变量
ucSize = sizeof(intArray)/sizeof(int); //用来存储计算的值
return ucSize ;
}
/********** Code End**************/
在debug时候能得到数组intArray的长度,很好,然后作一些改动,把数组intArray的定义还是放在file1.c,然后把函数ucCalc_VarSize放在file2.c中,在file2.c中用extern一下数组intArray,程序如下:
/********** Code Start **************/
file1.c:
int intArray[ ] = {2,3,4}; //因为此数组的长度可能会加长,所以并没有指定数组长度
file2.c:
extern int intArray[ ] ;
unsigned char ucCalc_VarSize(void)
{
unsigned char ucSize = 0; //定义一个局部变量
ucSize = sizeof(intArray)/sizeof(int); //用来存储计算的值
return ucSize ;
}
/********** Code End**************/
好了,问题来了,编译器报错了,出现 error: invalid application of 'sizeof' to an incomplete type 'int[]'。
带着问题去问了一下度娘,在度娘中搜到这个回答:
https://zhidao.baidu.com/question/1732467069931778067.html
说是如果使用了extern, 数组就退化成了普通的指针,就不是数组了。
于是我把file2.c中的extern int intArray[] ;改为extern int intArray[3] ;指定了数组的长度,然后......编译器就没有报错了。
对于这个回答,我产生了一个疑问,如果" 使用了extern, 数组退化成了普通的指针“ ,那上面的 "ucSize =sizeof(指针)/sizeof(int)" 按照道理说也可以的啊,sizeof(指针)一般不是等于4吗?那为什么编译器会报错?本人的C语言是极度的差,请各路大侠不吝指教!!!