我直接贴代码了
#include <stdio.h>
struct A
{
int a;
int b;
};
int main()
{
struct A test;
double *p = (double *)&(test.a);
*p = 5;
printf("variable a: %d\n", &test.a);
printf("variable b: %d\n", &test.b);
return 0;
}
我在centos7中运行这段代码,编译器是gcc4.8.5
.而且我的电脑使用little end来存储。
如你所见,变量b
的内存会被覆盖,我预计a
是 0x0000 0005
和b
是 0x0000 0000
.
但答案是:
variable a: 0
variable b: 1075052544
为什么变量 a
是 0x 0000 0000
和b
是 0x4014 0000
?
最佳答案
您的代码的行为未定义。
一旦将 p
设置为非 double
类型的地址,就无法取消引用它。
要查看编译器对此输入执行的操作,请检查生成的程序集。
关于c - 双指针指向int变量覆盖内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46688641/