为了账号安全,请及时绑定邮箱和手机立即绑定

(入门级问题,求解答~)关于强制类型转化的小问题

(入门级问题,求解答~)关于强制类型转化的小问题

C
TheReal无无 2018-05-13 18:08:44
这个强制类型转换中Num是临时的,那他有效条件是啥?紧接着一行有用?还有,Num为什么等于-1#QNANO????这是什么鬼
查看完整描述

3 回答

?
onemoo

TA贡献883条经验 获得超454个赞

你说的是哪个“强制转型”?  从你发的另一个问题看,你可能对这些概念有些混乱,我一行行解释吧:

  • double num = 2.5;

    这句代码是定义了一个 double 类型变量 num,并且赋予初值 2.5

  • int Num = (int)num;

    这句是定义了 int 类型变量 Num,并以 num 初始化。

    这里等号右侧是 double 类型,左侧是 int 类型,并不相符。这样等号右侧的 double 类型值隐式转型为左侧的 int 类型,这个转型后的值会被作为初值赋予 Num。所以这里本来就会发生隐式转型,那个“强制转型 (int)”是没有必要的,可以去掉。

    还有一点要注意:我写的是“...右侧的 double 类型值会隐式转型...”。隐式转型并不会改变 num 的类型,num 的类型永远是声明时的那个(也就是 double)。隐式转型只是把 num 这个变量的值(浮点值 2.5)转为整形值 2

    我不知道你问的“有效条件”是什么意思。你的理解可能有误,Num 不是临时的!Num就是个正常的 int 类型变量。只是在初始化 Num 时、在确定初值的过程中,等号右侧的 num 的值发生了一次隐式转型而已(再强调一下,这对 num 不会有任何影响)

  • printf("...%d\n", Num);

    printf 打印变量的值需要搭配相应的“格式化指示符”。Num 是 int 型,对应的格式化指示符是 %d,所以这句代码没有问题,打印出了 2

  • printf("...%f\n", Num);

    那么这句就有问题了!

    Num 是 int 型,不应该用 %f,所以输出的内容不正确。

    至于那个 #QNANO,它是提示“不是合法的浮点值”,这是当然的,因为 Num 根本就不是浮点类型。其实你不用管这个,你只要知道你用了不正确的格式化指示符,printf 就不能打印出正确的内容,打出什么奇怪的东西都有可能。

查看完整回答
1 反对 回复 2018-05-14
?
0云川0

TA贡献4条经验 获得超0个赞

编译器问题吗

查看完整回答
反对 回复 2018-05-14
?
0云川0

TA贡献4条经验 获得超0个赞

好像没毛病啊

查看完整回答
反对 回复 2018-05-14
  • 3 回答
  • 0 关注
  • 1293 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信