C++Primer第五版 第四章习题答案(11~20)

1:

(a>b) && (b>c) && (c>d)

2:记住:算数>关系>逻辑

所以该式等同于:

i != (j

3:不同类型的赋值,肯定是需要强制类型转换的。

赋值运算符满足右结合律。

所以结果为:

(1): d=3.0  i=3

(2): d=3.5  i=3


4:第一条语句,将变量赋给常量,判断肯定是假。

第二条语句,将42赋给变量i,本身没有问题,但是在此此处会检验赋值的结果是否为真,42非0,所以为真。

一定要注意赋值和相等运算符的差异


5:pi是一个指针,不可以被赋值为0。

可改为:

dval = ival = *pi = 1;

修正:0可以赋值给任何对象,这里0隐式地转换为null_ptr,此题错在指针类型不能隐式地转换为int整形类型。感谢评论区的小伙伴指正~@baidu_26426581

改正的方法同上。


6:赋值语句在这里被当作条件。可改为:

if ((p=getPtr()) != 0)

if (i == 10)

7:前置的递增运算符:先算后用,后置的递增运算符:先用后算。递减一样。


8:那么程序会输出第二个元素,直到最后一个元素的后一个位置(未知的量,非常危险)


9:直接修改正确的形式如下:

(a):(*ptr != 0) && (*ptr++)  判断ptr指针指向的int值是否为0

(b):判断ival和ival+1两个值是否都非0

(c):感谢评论区的两位同学指出错误:因为求值顺序不一定P123页,所以会产生未定义行为,vec[ival] <= vec[ival+1];


10:箭头运算符也是非常的重要啊!

       首先介绍下点运算符,用于获取类对象的一个成员。点运算符与箭头运算符之间的关系:

ptr—>mem   与   (*ptr).mem 等价。


(a):合法:先对iter加1,再返回iter指向的值

(b):不合法:返回iter指向的值为string ++操作无意义

(c):不合法:iter是一个指针,没有empty()的成员

(d):合法:判断iter所指向的值是否为空

(e):不合法:*iter可以得到iter所指的字符串,但是字符串并没有++操作。

(f):合法:首先判断iter所指向的值是否为空,再对iter加1

你可能感兴趣的:(【C++Primer习题】,C++Primer,第五版习题答案详解,C++,第四章,箭头运算符)