我们在 File1.c 中有
int arr[10];
在 File2.c 中
extern int *arr;
int main()
{
arr[0]=10;
return 0;
}
这可能会出现什么问题,为什么?
最佳答案
数组不是指针。内存访问会出错。
在 File1.c
中,您有内存布局:
+---+---+---+---+---+---+---+---+---+---+
+ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+---+---+---+---+---+
^
arr
在 File2.c
中,您已经告诉编译器您有内存布局:
+-------+
| ptr |
+-------+
^
arr
指针大概指向可以存储整数的地方。
编译器必须以完全不同的方式从 extern int arr[];
访问 extern int *arr;
。
如所写,最有可能的结果是编译器取消引用空指针时发生崩溃。但是,行为是未定义的,一切皆有可能。你对编译器撒了谎;编译器会得到它自己的返回——它不喜欢被骗。
关于改变外部变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11433953/