代码一是:
int a = 0x42500000;
float *f = (float *)&a;
printf("%f", *f); //output 52.00000
代码二是:
int a = 0x42500000;
float f = (float)a;
printf("%f", f); //output 0.00000
为什么代码二输出0.00000,谁能告诉我为什么?
答案 0 :(得分:4)
第一个片段解释a
的内存位置的内容,就好像它是浮动的,没有强制转换。除非你真的知道自己在做什么,否则你不想这样做,这几乎总是一个错误。
第二个片段将a
的值转换为float,这应该给你与int相同的值。它真的做到了。您的代码为我1112539136.000000
。你在使用什么编译器并在那里获得0
?
答案 1 :(得分:2)
第一个演员告诉编译器假设存储a
的位置是float
并同样考虑它。
第二个告诉编译器假设a
是float
并同样考虑它。