C语言功底还是要加深纳(自我提醒一下)

今天逛论坛有道题目:

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

这是不定参数的特点,没有类型检查,没有类型转换




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值