zoukankan      html  css  js  c++  java
  • 练习4.13、4.14、4.15、4.16

    4.13:在下述语句中,当赋值完成后 i 和 d 的值分别是多少?

    int i ; double d ;

    (a) d=i=3.5;  (b)i=d=3.5

    Ans:a) i=3,d=3.0;b)i=3,d=3.5;

    4.14:执行下述if语句后将发生什么情况?

    if  (42=i)  //....

    if  (i=42)  //....

    Ans:第一条语句,编译器会报错,因为赋值语句的左值,必须是可以修改的。第二条语句,条件为将42赋值给 i,这个条件始终为真,直接执行后续if语句中的内容。

    4.15:下面的赋值是非法的,为什么?应该如何修改?

    double dval; int ival; int *pi;

    dval=ival=pi=0;

    Ans:赋值运算符满足右结合律,又因为pi是指向Int类型的指针,ival是int类型,将int *类型转换成int类型是不合法的,更别说是double类型了。

    修改后:

      double dval; int ival; int *pi;

      dval=ival=0;

      pi=0;

    4.16、尽管下面的语句合法,但它们实际执行的行为可能和预期并不一样,为什么?应该如何修改?

    (a) if  (p=getPtr() != 0)  (b)if (i = 1024 )

    Ans:a) 预期是想让getPtr()函数返回的值赋值给p,然后再跟0进行比较,但是由于关系运算符的优先级要大于赋值运算符的优先级,所以实际执行的是让getPtr()函数返回的值与0比较,然后再赋值给p。只要getPtr()返回一次的值不等于0,那么整个条件都为真,即p的值始终为1;     应改成: if  ( (p=getPtr() ) != 0)

       b) 预期是想判断 i 的值是否等于1024,结果实际执行的确实赋值操作,将1024赋值给i,使得条件一直为真。应改成:if (i == 1024 )

  • 相关阅读:
    Go 解析JSON
    查看端口占用并结束进程
    DNS
    u盘禁用
    主机规划与磁盘分区
    响应式设计初识
    SVG基础
    BootStrap入门
    python中 "is"和"=="的区别
    关于C++模板不能分离编译的问题思考
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9438405.html
Copyright © 2011-2022 走看看