双指针指向int变量覆盖内存

UKe*_*Dis -5 c memory double int pointers

我直接贴代码了。

#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;
}
Run Code Online (Sandbox Code Playgroud)

我在centos7中运行这段代码,编译器是.gcc4.8.5并且我的电脑使用little end来存储。

正如你所看到的,变量的内存b将被覆盖,我期望的a是 is0x0000 0005bis 0x0000 0000

但答案是:

variable a: 0
variable b: 1075052544
Run Code Online (Sandbox Code Playgroud)

为什么变量a0x 0000 0000并且b0x4014 0000

Bat*_*eba 5

您的代码的行为是未定义的

p一旦将其设置为非类型的地址,就无法取消引用double

要查看编​​译器对此输入执行的操作,请检查生成的程序集。