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 下面的那些初始化是合法的,请说明原因
练习 2.28 说明下面的这些定义是什么意思,挑出其中不合法的。
练习 2.29 假设已有上一个练习中定义的那些变量则下面的那些语句是合法的?请说明原因。
练习2.30 对于下面的这些语句,请说明对象被声明成了顶层const还是底层const.
练习 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
转载声明出处
默认状态下,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
相关文章推荐
- Unix编程(二)C语言利用PV原句解决5个经典的进程同步问题
- C++primer 17.2 bitset类型
- c++11新特性VS2013编译器
- 2015 C++暑期实训(下)
- C++局部对象的析构
- C++的精髓——虚函数
- C++ Primer Week2
- 陈正冲老师讲c语言之内存的申请malloc() 和释放free()
- 使用C语言实现点菜系统
- c++工厂模式(Factory method)
- 逗号运算符
- 转 编程: VC++学习方法及书籍
- C++primer 17.4 随机数
- (C++ )矩阵
- 你应当如何学习C++(以及编程)(rev#1)
- C++与linus
- 像原生C/C++,序列化Java对象
- c++笔记之赋值函数,拷贝构造函数,构造函数,析构函数
- C学习笔记——接触C语言
- hdu5532Almost Sorted Array(长春现场赛)