我知道这是错误的,gcc 会给你一个警告,但为什么它会起作用(即数字打印正确,有一些四舍五入的差异)?
int main() {
float *f = (float*) malloc(sizeof(float));
*f = 123.456;
printf("%f\n", *f);
printf("%f\n", f);
return 0;
}
编辑: 是的,我在 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;
}
这导致第一个 printf 打印的值与最后一个 printf 不同,尽管是相同的。