您的位置:首页 > 编程语言 > C语言/C++

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

2015-11-01 21:09 543 查看
本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。

转载声明出处

默认状态下,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: