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

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

(为了将问题说清楚,后来我又在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”是将其声明为指针变量,这显然是不行的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值