C++Primer第五版 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)非法,int &r = 0。错误
(b)合法 p2是一个常量指针,一直存放i2的地址,不能变动,但能间接改动i2的值
(c)合法
(d)合法 p3是一个常量指针,一直存放i2的地址,且不能通过修改p3来修改i2的值
(e) 合法,p1存放i2的地址,不能通过修改p1来改变i2的值,但p1本身存放的地址是不是可以变化?
(f) 非法 引用本身不是一个对象
(g)合法

练习2.28 :说明下面的这些定义是什么意思,挑出其中不合法的。
(a) int I ,*const cp;
(b) int *p1 ,*const p2;
(c) const int rc, &rc =ic;
(d) const int *const p3;
(e) const int *p;
(a) 不合法,没有初始化
(b) 不合法,没有初始化
(c) 不合法,前一半没有初始化,后一半类型不对应
(d) 不合法 没有初始化
(e) 不合法 没有初始化
练习2.29:假设已有上一个练习中定义的那些变量,则下面的哪些语句是合法的?请说明原因。
(a)i = ic;
(b) p1 = p3;
(c) p1 =⁣
(d) p3 = ⁣
(e) p2 = p1;
(f) ic =* p3;
答:(a)合法 ic是常量,可以赋给i
(b).不合法
(c)不合法,类型不一致
(d)合法
(e)不合法
(f) 不合法 类型不一致

网上参考答案:

2.27
(a) 引用需要用对象初始化
(b)正确 常量指针一直指向i2
(c)const int &r=0;正确 常量引用
(d)指向常量对象的常量指针 而且指针指向位置也不变
(e)指向常量对象的常量指针
(f)必须初始化
(g)正确

2.28
(a)常量指针没有初始化
(b)常量指针没有初始化
(c)常量整型没有初始化
(d)一个指向常量对象的常量指针必须初始化
(f)一个指向常量的指针 没有初始化 合法

2.29
(a)用const int 赋值 可以
(b)p1是int指针 p3是const int 指针 无法从“const int const ”转换为“int
(c) 无法从“const int const ”转换为“int
(d)如果这句是初始化 可以!!已经初始化过 这句话不行
(e)因为p1指向的对象可能发生变化 不合法
(f)ic不能被赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值