C语言取extern变量的大小

说明:程序编译环境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语言是极度的差,请各路大侠不吝指教!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值