下面的声明取自某个源文件:
int a[10];
int *b = a;
但在另一个源文件中,却发现了这样的代码:
extern int *a;
extern int b[];
int x,y;
...
x = a[3];
y = b[3];
请解释一下,当两条赋值语句执行时会发生什么?(假定整型和指针的长度都是4个字节。)
int a[10];
int *b = a;与
extern int *a;
extern int b[];声明和定义并不一致。
先看一下程序跑的结果吧:
//file: a.c
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *b = a;
void test() {
printf("a: 0x%x\n", a);
int i;
for(i = 0; i < 10; i++) {
printf("&a[%d] = 0x%x\n",i, &a[i]);
}
printf("b: 0x%x\n", b);
}
#include <stdio.h>
extern int *a;
extern int b[];
extern test();
int x, y;
int main () {
test();
x