今天逛论坛有道题目:
printf("%f",10/3); 答案是多少?
结果为什么是:0.000000
自己试验了一下,结果果然如此,只要后面参数是int类型结果都是0.000000。
要想得到正确结果,必须:
printf("%f",(float)10/3);
或者:
printf("%f",10/3.0);
找不到根本原因,后来看到一位兄弟的解释,豁然开朗,真是佩服。C语言博大精深,指针真是精髓。
这位仁兄解释如下:
原因在于printf,printf不会关心你输入的参数的类型,你输入的实际是
printf("%f",3),但是这个整型3不会被隐式类型转换为浮点型,而是被直接按内存内容当作浮点型
也就是说,内部使用等价于
int i = 3;
printf("%f", *(float*)&i)
不幸的是,整型3在内存布局上如果看成浮点数,它就是接近于0
这是不定参数的特点,没有类型检查,没有类型转换