关于数组类型的外部变量的声明
来源:互联网 发布:中国新闻周刊 知乎 编辑:程序博客网 时间:2024/06/10 02:46
今天写项目程序时遇到一个问题,总结下来就是关于数组类型的外部变量的声明,这里将问题简化如下。
(为了将问题说清楚,后来我又在vs2008下调试了一番,项目中用到的开发环境是CCS4,不过问题的本质是一样的)
example.c
unsigned int Buf[10];
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
- 关于数组类型的外部变量的声明
- [基础]外部变量声明时,同时初始化变量的写法,包括Record类型。
- 关于“类型,参数,变量”的声明中,其编程风格
- 不同存储类型的变量的声明、内部函数、外部函数
- 关于JAVA变量的声明
- 关于指针数组的声明
- VBA--声明变量类型的一个陷阱!
- 结构体类型变量的声明方式
- 枚举变量的使用和类型声明
- js变量的声明、类型、以及使用
- 变量的存储类型、外部变量、static内部变量讲解
- enum+数组的成员变量声明方式
- 黑马程序员----数组变量的声明
- vbs 声明数组变量的奇怪问题
- 单片机及C51的sbit变量如何实现外部声明
- java中关于static 类型的变量声明与初始化的问题
- [C++] 关于子类声明与父类同名同类型的成员变量的问题
- 使用extern声明外部定义的变量时不能赋值,只需声明变量
- jdbc
- 长征路上的益友——好的名人博客地址
- poj1753--Flip Game
- 从零写iic bus 总线驱动 (s5vp210)
- 关于集合
- 关于数组类型的外部变量的声明
- Redis 数据结构之ziplist
- ognl.MethodFailedException:
- Apache 性能调优
- oracle所有对象汇总
- IBM CEO罗睿兰:预计硬件业务在2015年实现增长
- Adnroid ActionBar 各种用法
- IOS Socket
- JAVA中的synchronized