#include<conio.h>
#include<stdio.h>
main()
{
printf(" %d %f ",4.0,4.0);
getch();
}
我的输出为0
4.000000
我想知道为什么4.0
变成zero
,因为使用了整数说明符?
为什么不将其截断为4
?
答案 0 :(得分:1)
说服自己尝试以下方法。有一些事情需要注意 - 浮动到int的隐式转换,printf()从堆栈的参数访问,它确定了内存位置和大小,以获得基于格式说明符存储的值。
printf(" %d %f ", (int)4.0, 4.0);
printf(" %d %f ", (float)4, 4.0);
printf(" %d %f ", (float)0, 4.0);
答案 1 :(得分:0)
你基本上撒谎到printf
,传递一个浮点值,你在一个整数中承诺; @Lashane解释了它如何得出0(4.0的二进制表示为0x40100000_00000000
,%d取最后4个字节,均为0)。但是,因为这是未定义的行为,所以在不同情况下可能会得到不同的结果。