《C++ Primer》第五版课后习题解答_第二章(3)(21-29)
系统环境: windows 10 1703
编译环境:Visual studio 2017
2.21
(a) 非法,指针与对象数据类型应相同;
(b) 非法,不能把 int 变量直接赋给指针,即使 int 变量的值恰好是零也不行;
(c) 合法,ip 存放着 i 的地址。
2.22
if (p) 当 p 不是空指针时,执行 if 中的语句;
if (*p) 当 p 指向地址所保存的值不是0时,执行 if 中的语句。
2.23
(试图从网上查资料,未果,大家的解释看不懂。标注一下,学完了回头看。给定一个指针,如何判断这个指针是否已经指向一个合法的对象?)
2.24
因为 void 类型的指针可以存放任意对象的地址,所以 p 合法;
lp 的类型和 i 的类型不同,不能赋值,故 lp 非法。
2.25
(a)
ip: int 类型的指针,未初始化
i: int 类型的变量
r: int 类型的引用
(b)
i: int 类型的变量
ip: int 类型的空指针
(c)
ip: int 类型的指针
ip2: int 类型的变量
2.26
(a) 不合法,const 变量定义时必须初始化;
(b) 合法;
(c) 合法,const 变量 sz 初始化为 int 变量 cnt 的值;
(d) ++cnt 合法;
++sz 不合法,const 对象不能改变其值。
2.27
(a) 不合法,引用的初始化必须是对象;
(b) 合法,指针 p2 将一直指向了 i2;
(c) 不合法,r 是常量引用 //注意!
(d) 合法,p3 是指向常量对象 i2 的常量指针;
(e) 合法,p1 是指向常量对象 i2 的指针;
(f) 不合法,const 是关键字,不能作为引用的标识符;
(g) 合法,i2 被赋给了 i 的值,r 绑定了 i。
【总觉得这道题出得不好,没有上下文,不能判断各种变量名引用名与其是否已初始化】
2.28
(a) 不合法,int 型变量 i,int 型常量指针 cp 必须初始化;
(b) 不合法,int 型指针p1,int 型常量指针 p2 必须初始化;
(c) 不合法,变量引用 r 绑定了常量 ic;
(d) 不合法,指向常量对象的常量指针 p3 必须初始化;
(e) 合法,指向常量对象的指针 p。
//所有常量必须初始化,不管是数值常量还是常量指针。
2.29
(a) 合法 常量对象 ic 的值复制给了 int 型变量 i;
(b) 合法,把 p3 指向对象的地址赋给 p1;
(c) 不合法,把常量对象 ic 的地址赋给了非指向常量的指针;
(d) 合法;
(e) 不合法,常量指针 p2 指向的对象不能改变;
(f) 不合法,常量对象 ic 的值不能改变。