我正在阅读C开头编程,因为傻瓜遇到了一个我无法理解的代码
#include <stdio.h>
int main(void)
{
printf("The total is %d\n", 16.0 + 17);
}
将输出显示为:
The total is 0
我认为第一个16.0 + 17
会自动键入强制转换为16.0 + 17.0 = 33.0
,然后在打印它的值时会截断小数,最终输出将为:
The total is 33
你能解释为什么输出结果为0
:
答案 0 :(得分:3)
printf
的声明是这样的:
int printf(const char *format, ...);
它需要可变长度参数,其中第一个format
是必需的。但它不能提前知道后来的参数类型,即在编译期间。因此,为了确定后续参数的类型,即知道它必须从内存中读取多少字节,如何解释这些字节等,它完全取决于格式字符串中的格式说明符。
这就是格式说明符和实际类型必须匹配的原因。否则它将是未定义的行为,在这种情况下可能发生任何事情。