关于数组类型的外部变量的声明

来源:互联网 发布:中国新闻周刊 知乎 编辑:程序博客网 时间:2024/06/10 02:46

今天写项目程序时遇到一个问题,总结下来就是关于数组类型的外部变量的声明,这里将问题简化如下。

(为了将问题说清楚,后来我又在vs2008下调试了一番,项目中用到的开发环境是CCS4,不过问题的本质是一样的)

example.c

unsigned int Buf[10];


main.c
void Init(unsigned int *p){int i;for(i=0; i<10; i++){*(p + i) = i;}}void main(void){extern unsigned int *Buf;Init(Buf);}


该程序编译无错也无警告。

调试时发现Buf却是0x00000000,这个地址当然是不能被处理的。

(项目中用的是DSP处理器,开发环境是CCS4,在“extern unsigned int *Buf;”和“Init(Buf);”处查看Buf时,发现其值确实为数组Buf的首地址,但是当程序执行到Init()函数里面时,形参指针p得到的却是另一个地址,这个地址好像是随机分配的)


百思不得其解,后来将extern声明改为“extern unsigned int Buf[10];”,别的地方不变,则一切都正常了。

对此stone童鞋解释如下:

 extern 表示声明一个符号, 这个符号所代表的变量是在其他文件里定义过的。  
如果要想用别的文件里定义过的变量,则要用extern声明,且声明的时候应当与定义时的类型保持一致(类型要匹配)。
在example.c中声明的Buf[]是一个数组,Buf是数组名,它是一个常量指针(只读的),而在main.c文件这样“extern unsigned int *Buf”是将其声明为指针变量,这显然是不行的。

0 0
原创粉丝点击