我知道这是错误和GCC会给你一个警告,但它为什么会工作(即数字打印正确,有一些舍入差异)?怪异的结果打印指针作为浮点数C
int main() {
float *f = (float*) malloc(sizeof(float));
*f = 123.456;
printf("%f\n", *f);
printf("%f\n", f);
return 0;
}
编辑: 是的,我用gcc有32位机。我很好奇,看看我会用其他编译器得到什么结果。
我插手的东西多一点以下克里斯托夫的建议:
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不同的值,尽管是相同的。
接近正确的:该参数是按值传递,但推指针堆栈只覆盖(晋升)64位浮点的下半部分值 – Christoph 2009-11-22 17:45:04
你应该发布你得到的实际输出。你是在暗示第二个printf实际上打印'123'或类似的东西? – JustJeff 2009-11-22 17:49:54