近日阅读c专家编程,对c语言中的指针数组的区别有了新的认识。
先看一段代码:
//des.c
int a[] = {3,2};
void hello(){
printf("d.c %d",a);
}
//test.c
#include<stdio.h> extern void hello(); extern int *a; int main(void){ hello(); printf("\n : %d",a);
//printf("\n : %d",a[1]); return EXIT_SUCCESS; }
上面的代码的输出为
d.c 134520856
: 3第一行代码是第一个文件d.c输出了int a[];a的内容
第二行代码是第二个文件hello.c输出了extern int *a;指针a的内容
gcc编译的时候,在链接阶段了,hello.o有extern a符号,在d.o中找到,所以extern a 和d.o的a是同一个符号(我认为称他们“指向相同”有歧义)
也可以用图像表示