#include <stdio.h>
int main() {
float a = 1234.5f;
printf("%d\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它显示0
!! 怎么可能?是什么原因?
我故意%d
在printf
声明中加入研究行为printf
.
考虑这个计划
int main()
{
float f = 11.22;
double d = 44.55;
int i,j;
i = f; //cast float to int
j = d; //cast double to int
printf("i = %d, j = %d, f = %d, d = %d", i,j,f,d);
//This prints the following:
// i = 11, j = 44, f = -536870912, d = 1076261027
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么从double/float到int的转换在第一种情况下正常工作,并且在printf中完成时不起作用?
该程序是在32位linux机器上的gcc-4.1.2上编译的.
编辑: Zach的答案似乎是合乎逻辑的,即使用格式说明符来确定从堆栈弹出的内容.但是请考虑这个后续问题:
int main()
{
char c = 'd'; // sizeof c is 1, however sizeof …
Run Code Online (Sandbox Code Playgroud)