变量声明与定义不同:数组声明为指针,指针声明为数组
先弄清楚下述两图的区别应该对后续问题的理解有很大帮助:
定义为指针,声明为数组:
文件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)按什么规则来提取和使用这些数据。