我们在 File1.c 中有
int arr[10];
在 File2.c 中
extern int *arr;
int main()
{
arr[0]=10;
return 0;
}
这样做可能会出现哪些问题以及为什么?
数组不是指针。内存访问将会出错。
In File1.c
,你有内存布局:
+---+---+---+---+---+---+---+---+---+---+
+ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+---+---+---+---+---+
^
arr
In File2.c
,你已经告诉编译器你有内存布局:
+-------+
| ptr |
+-------+
^
arr
其中指针大概指向可以存储整数的某个地方。
编译器必须做完全不同的事情才能访问extern int *arr;
from extern int arr[];
.
正如所写,最可能的结果是编译器取消引用空指针时崩溃。不过,行为是未定义的,一切皆有可能。你对编译器撒了谎;编译器会得到自己的回报——它不喜欢被欺骗。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)