我知道这是错的,gcc会给你一个关于它的警告,但为什么它会起作用(即数字打印正确,有一些舍入差异)?
int main() {
float *f = (float*) malloc(sizeof(float));
*f = 123.456;
printf("%f\n", *f);
printf("%f\n", f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑: 是的,我正在使用带有32位机器的gcc.我很想知道其他编译器会得到什么结果.
在Christoph的建议之后,我更多地干涉了一些事情:
int main() {
float *f = (float*) malloc(sizeof(float));
*f = 123.456;
printf("%f\n", f); // this
printf("%f\n", *f);
printf("%f\n", f); // that
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这导致第一次printf打印的值与最后的printf不同,尽管是相同的.