《C和指针》 中的一个课后题 疑问
原题如下:
“ 下面的声明取自某个源文件:
int a[10];
int *b = a;
但在另一个不同的源文件中,却发现了这样的代码:
extern int *a;
extern int b[];
int x, y;
...
x = a[3];
y = b[3];
请解释一下,当两条赋值语句执行时会发生什么?(假定整形和指针长度都是4个字节。)”
关于上题目有以下几个问题:
1. 什么算一个源函数?就是一个由main()及其声明定义的函数组成的吗?
2. 该题中,删去前半部分,即“下面的声明取自某个源文件:int a[10];int *b = a;”,有影响吗?
3. 此处后半部分中的“另一个源文件”中的 extern 左右为何?可以使得前面的那个“某一个源文件”可用?或者再其它什么地方可用?
4. 最有括号里面“(假定整形和指针长度都是4个字节。)”,告诉整形长度是为了指针移动时候的换算,那告诉指针长度是作何计算可用?
[解决办法]
1. 题目中没有提到源函数. 不晓得你指的是哪里的概念.
2. 当然有影响. 否则程序链接的时候找不到 a, b
3. extern 告诉编译器, 在其它某个地方定义了这几个符号, 下面的代码按声明的类型来处理这个符号. 把符号对应的地址空出来, 让连接器在其它地方找到后再把地址填进去.
4. 你知道了答案后就知道它的用处了.