关于Access Specifier

时间:2016-03-14 19:11:57

标签: c

#include<conio.h>
#include<stdio.h> 

main()
{
  printf(" %d %f ",4.0,4.0);
  getch();
}

我的输出为0 4.000000 我想知道为什么4.0变成zero,因为使用了整数说明符? 为什么不将其截断为4

2 个答案:

答案 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)。但是,因为这是未定义的行为,所以在不同情况下可能会得到不同的结果。