情况一:定义为数组,声明为指针

文件1中定义如下:

char array[100];

文件2声明如下:

extern char *array;

分析:假如array[100]中存的是"abcde..........";

extern char *array;编译器认为array是一个指针变量为其分配4个字节。

然而,array[100]中的存储方式为:

0X410X420X430X44

则*array取四个字节为0X41424344(没有考虑大端小端),这个地址为谁的地址,鬼知道。所以这样声明是错误的。

情况二:定义为指针,声明为数组

文件1定义如下:

char *p = "abcdef";

文件2声明:

extern char p[];

分析:这个就就很好分析了,假如p保存常量字符串的地址,假设为0XFF00FF00。

0XFF0X000XFF0X00

则文件2中的p[0] ==0XFF,p[1] == 0X00,p[2] == 00XFF,p[3] == 0x00。很明显错误;

下面是VS2010下的测试;

情况1:

wKioL1ZR4jjSHA7jAAAFBo1h7Vc885.gif

wKiom1ZR4eDxscReAAAEeBp-WKA384.gif

wKioL1ZR4jmjTJUPAAAIE_f5l6Q435.gif

情况2:

wKiom1ZR4eHRVINVAAAE-ij9y9w161.gif

wKioL1ZR4jvipbJMAAAEnnv2JY4105.gif

wKiom1ZR4eOwxgpoAAAOV0GnFX0996.gif