变量声明与定义不同:数组声明为指针,指针声明为数组

先弄清楚下述两图的区别应该对后续问题的理解有很大帮助:

 

 

 

 

定义为指针,声明为数组:

文件1.c定义:

 char* p="1234"; //定义一块名为p的内存,存放char*地址,该地址为"1234"的首地址

文件2.c声明: 

extern char p[];  //外面某个文件定义了一块名为p的内存,里面存放了一个数组

 总结:假设"1234"字符串的地址为0x11223344。1.c内p[0]的值为"1",2.c内p[0]的值却为0x11。

 

定义为数组,声明为指针:

文件1.c定义:

char a[]="1234";//定义一块名为a的内存,存放"1234" 

 

文件2.c声明:

extern char* a;//外面某个文件定义了一块名为a的内存,里面的数据类型是char *

总结:1.c内a[0]的值为"1";    2.c内a[0]的值为0x31323334地址(忽略大小端)的值。明显两个c文件内a值代表的意义不一样。

 总之,定义(比如1.c)确定内存块的名字和数据了,就看外部声明(比如2.c)按什么规则来提取和使用这些数据。

posted @ 2020-06-29 15:56  云中虾  阅读(283)  评论(0编辑  收藏  举报