标签:指针和数组的定义与声明
情况一:定义为数组,声明为指针
文件1中定义如下:
char array[100];
文件2声明如下:
extern char *array;
分析:假如array[100]中存的是"abcde..........";
extern char *array;编译器认为array是一个指针变量为其分配4个字节。
然而,array[100]中的存储方式为:
0X41 | 0X42 | 0X43 | 0X44 |
则*array取四个字节为0X41424344(没有考虑大端小端),这个地址为谁的地址,鬼知道。所以这样声明是错误的。
情况二:定义为指针,声明为数组
文件1定义如下:
char *p = "abcdef";
文件2声明:
extern char p[];
分析:这个就就很好分析了,假如p保存常量字符串的地址,假设为0XFF00FF00。
0XFF | 0X00 | 0XFF | 0X00 |
则文件2中的p[0] ==0XFF,p[1] == 0X00,p[2] == 00XFF,p[3] == 0x00。很明显错误;
下面是VS2010下的测试;
情况1:
情况2:
标签:指针和数组的定义与声明
原文地址:http://zhaoxiaohu.blog.51cto.com/10778115/1715799