c++ primer第五版(中文)习题答案 第二章第四节-const限定符

本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。
转载声明出处

默认状态下,const对象仅在文件内有效 ,在其他文件中使用 必须在变量前面加extern才能访问。

const 的引用 :可以把引用绑定到const对象上,就像绑定到其他对象上一样 我们称之为对常量的引用 ,对常量的引用不能被其他用作修改它所绑定的对象,普通引用不能引用常量对象,常量引用 可以引用普通和常量对象。

指针const:
指向常量的指针,不能用于改变其所指对象的值,要想存放常量对象的地址,只能使用指向常量的指针。 (const 在*的左边)

const指针: 指针本身地址不能被改变,(const 在* 的右边)

练习 2.26 下面那些句子是合法的,如果有不合法的句子,请说明为什么
a . const int buf;//不合法 没有初始化const
b. int cnt =0;
c const int sz = cnt;
d ++cnt;++sz; //错误 sz是const 不能对其值进行修改

练习 2.27 下面的那些初始化是合法的,请说明原因

a. int i = -1,&r =0; //错误 引用是对象
b. int *const p2 =&i2; //正确
c. const int i = -1,&r =0;//正确 r是常引用 0是常量
d. const int *const p3 = &i2; // 正确
e. const int *p1 =&i2; //正确
f. const int &const r2;//错误 引用不能const 
g. const int i2 = i;&r=i;//正确

练习 2.28 说明下面的这些定义是什么意思,挑出其中不合法的。

a. int i,*const cp;//错误 没有初始化 const指针cp
b. int *p1,*const p2; //错误 没有初始化 const指针p2
c. const int ic,&r =ic;//错误 ic没有初始化
d. const int * const p3;//错误 const指针p3没有初始化
e. const int *p; //正确 指针本身是常量 ,不是指向常量 可以不初始化

练习 2.29 假设已有上一个练习中定义的那些变量则下面的那些语句是合法的?请说明原因。

a. i =ic;  //正确
b. p1 =p3; //p3是一个常指针
c. p1 =⁣ //错误,常量 使用常量指针
d. p3 =⁣ //错误 ,p3本身也是const
e. p2 = p1; //错误 p2是常指针不能改变指向的地址 
f. ic =*p3; //错误 ic是const 不能修改其值

练习2.30 对于下面的这些语句,请说明对象被声明成了顶层const还是底层const.

a. const int v2 =0;  //顶层
b. int v1 = v2;      
c. int *p1=&v1,&r1=v1; 
d. const int *p2 =&v2,*const p3 =&i,&r2 =v2; //p2 底层,p3左边的底层 右边是顶层,r2是底层

练习 2.31 假设已有上一个练习中所做的那些声明,则下面的那些语句是合法的,请说明顶层const和底层const在每个例子中有何体现。
r1 =v2; //正确
p1=p2; //错误 p2是底层const ,p1不是
p2=p1;//正确
p1=p3;//错误 p3是底层const ,p1不是
p2=p3;//正确
练习 2.32 下面代码是否合法,如果非法,请假设将其修改正确
int null = 0 ,*p =null;
不合法,修改
int null = 0 ,*p =&null; //p指向变量null
int null = 0 ,*p =nullptr;//p为空指针 nullptr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值