2.4.2节练习
练习2.27:下面的哪些初始化是合法的?请说明原因。
(a) int i = -1 &r = 0; (b) int *const p2 = &i2;
(c) const int i = -1 &r = 0; (d)const int *const p3 = &i2;
(e) const int *p1 = &i2; (f) const int &const r2;
(g) const int i2 = i &r = i;
出题思路:本题旨在考查常量引用、常量指针和指向变量的指针的初始化方法。
解答:
(a)是非法的,非常量引用r不能引用字面值常量0。
(b)是合法的,p2是一个常量指针,p2的值永不改变,即p2永远指向变量i2。
(c)是合法的,i是一个常量,r是一个常量引用,此时r可以绑定到字面值常量0。
(d)是合法的,p3是一个常量指针,p3的值永不改变,即p3永远指向变量i2;同时p3指向的是常量,即我们不能通过p3改变所指对象的值。
(e)是合法的,p1指向一个常量,即我们不能通过p1改变所指对象的值。
(f)是非法的,引用本身不是对象,因此不能让引用恒定不变。
(g)是合法的,i2是一个常量,r是一个常量引用。
练习2.28:说明下面的这些定义是什么意思,挑出其中不合法的。
(a) int i *const cp; (b) int *p1 *const p2;
(c) const int ic &r = ic; (d) const int *const p3;
(e) const int *p;
出题思路:本题旨在考查常量引用、常量指针和指向常量的指针的定义及区别。
(a)是非法的,cp是一个常量指针,因其值不能被改变,所以必须初始化。
(b)是非法的,p2是一个常量指针,因其值不能被改变,所以必须初始化。
(c)是非法的,ic是一个常量,因其值不能被改变,所以必须初始化。
(d)是非法的,p3是一个常量指针,因其值不能被改变,所以必须初始化;同时p3指向的是常量,即我们不能通过p3改变所指对象的值。
(e)是合法的,但是p没有指向任何实际的对象。
练习2.29:假设已有上一个练习中定义的那些变量,则下面的哪些语句是合法的?请说明原因。
(a) i = ic; (b) p1 = p3; (c) p1 = ⁣
(d) p2 = ⁣ (e) p2 = p1; (f) ic = *p3;
出题思路:本题旨在考查常量引用、常量指针和指向常量的指针的赋值方法。
解答:
(a)是合法的,常量ic的值赋给了非常量i。
(b)是非法的,普通指针p1指向了一个常量,从语法上说,p1的值可以随意改变,显然是不合理的。
(c)是非法的,普通指针P1指向了一个常量,错误情况与上一条类似。
(d)是非法的,p3是一个常量指针,不能被赋值。
(e)是非法的,p2是一个常量指针,不能被赋值。
(f)是非法的,ic是一个常量,不能被赋值。
普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。
好书推荐:《我的剧本世界在自主运行》、《我是舰娘》、《我的师妹是妖女》、《交错世界之学院都市》、《认清现实后,她们开始追夫火葬场》、《好徒儿你就饶了为师伐》、