当询问C中常见的未定义行为时,灵魂比我提到的严格别名规则更加开明.
他们在说什么?
int i = 10;
void *p = &i;
printf("%f\n", *(float*)p);
Run Code Online (Sandbox Code Playgroud)
float i=10.00;
void *p = &i; // no change
printf("%d\n", *(int*)p);
Run Code Online (Sandbox Code Playgroud)
为什么A打印0.0而不是10.0?如果我们将A改为B,那么它的输出就是垃圾.