什么是两种代码之间C语言中类型转换的差异

时间:2012-02-17 09:29:46

标签: c casting

代码一是:

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,谁能告诉我为什么?

2 个答案:

答案 0 :(得分:4)

第一个片段解释a的内存位置的内容,就好像它是浮动的,没有强制转换。除非你真的知道自己在做什么,否则你不想这样做,这几乎总是一个错误。

第二个片段将a的值转换为float,这应该给你与int相同的值。它真的做到了。您的代码为我1112539136.000000。你在使用什么编译器并在那里获得0

答案 1 :(得分:2)

第一个演员告诉编译器假设存储a的位置是float并同样考虑它。
第二个告诉编译器假设afloat并同样考虑它。