当前位置: 代码迷 >> 综合 >> C语言指针与数组的区别(1) extern
  详细解决方案

C语言指针与数组的区别(1) extern

热度:83   发布时间:2023-12-17 09:12:23.0

近日阅读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是同一个符号(我认为称他们“指向相同”有歧义)

也可以用图像表示