改变外部变量的值

标签 c extern

我们在 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/

相关文章:

c - 外部关键字和设置字符串变量

c - 使用 'extern' 在 C 中创建数组

c++ - 我只能从一个文件访问静态 fstream

c++ - 尝试以相反的顺序使用 extern

c - 缓冲区上的基名进入段错误

c - 从二进制文件中读取 DWORD

c - 在函数内声明 struct timeval time

c - 测试 NULL 与字符串指针 x86 与 x64 的长度?

c - 在 C 中,长整数被打印为负值

objective-c - Objective C - 如何使用外部变量?