c++ primer第五版(中文)习题答案 第二章第三节-复合类型
来源:互联网 发布:网络运营 专业技能 编辑:程序博客网 时间:2024/04/29 00:52
本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。
转载声明出处
本节学习复合类型 复合类型是基于其他类型定义的类型,c++有结构体,联合,枚举,自定义类型,引用,指针等复合类型,本节学习引用和指针。
引用:引用及别名,它为存在的对象所起的另一个名称。定义的时候必须赋初值。始终指向该对象,不会改变,以后的操作都是对该对象的操作。
指针:是指向另外一个类型存放的是另一个对象的地址 ,指针本身是一个对象,允许对指针进行赋值和拷贝,它可以先后指向不同的对象。指针在无须在定义的时候赋初值。空指针应该使用nullptr,不建议使用NULL。指针使用的时候记得初始化,虽然不会报错,但是会发生不可预料的后果。
void* 指针 存放任意对象地址,在需要的时候可以使用类型转换成需要的类型。
练习 2.15 下面的那个声明是不合法的?为什么
a int ival = 1.01; //正确 值丢失但是可以赋值
b int &rval =1.01; //错误 应用类型的初始值只能是对象
c int &rval2 =rval; //正确
d int &rval3; //错误 没有初始化
练习 2.16 考查下面的所有赋值然后回答。那些赋值是不合法的为什么那些是合法的?他们执行了什么样的操作。
int i =0; &r1 =i; double d= 0;&r2=d;
a. r2 =3.14159; //正确 把d的 修改为 3.14159
b. r2 =r1; //正确 改变r2的指向 指向i
c. i=r2; //给i赋值 值为r2指向的d的值
d. r1 =d; //修改r1指向的对象为d
练习 2.17 执行下面代码段输出结果?
int i ,&ri = i;i = 5; ri = 10;std::cout<<i<<""<<ri<<std::endl;
输出结果为 10 10 建议在使用变量的时候先初始化。
练习 2.18 编写代码分别改变指针的值,以及指针所指向的对象 的值
#include <iostream>#include <string>std::string global_str;int global_int;int main(){ int i = 10; int k = 20; int * p = &i; //初始化指针p 指向i的地址 std::cout << p << " " << *p << std::endl; p = &k; //更改p的值 指向k的地址 std::cout << p << " " << *p << std::endl; *p = i; //更改p指向的对象k 的值为i std::cout << p <<" " <<*p << std::endl; system("pause"); return 0;}
输出结果如下
可以看到第一次过后,改变了地址 和值,第二次只改变值而地址没有改变。
练习2.19说明指针和引用的区别。
引用是别名,没有实际的内存地址,指针是对象有自己本身的地址。
引用必须初始化,指针不是必须初始化,但建议全部初始化,
引用赋值后,不能改变指向的对象,只能改变指向对象的值。
指针赋值后,既能改变指向的对象,又能改变指向对象的值。
练习2.20请叙述下面的这段代码的作用
int i =42; int *p1=&i; //取地址*p1 = *p1 * *p1;//算平方
这段代码的作用是计算变量i的平方,然后在把平方结果赋值给i。
练习 2.21 请解释下述定义。在这些定义中有非法的吗?如果有,为什么
int i =0;
a. double *dp =&i; //double类型 不能使用int类型对象赋值
b. int *ip =i; //错误 不能再初始化的时候使用字面值,应该使用对象
c . int *p =&i; //正确
练习 2.22 假设p是一个int型指针,请说明下面代码的含义
if(p) //p判断指针是否指向了一个合法的对象
if(*p) // 指向的值是否为假
练习 2.23 给定指针p,你能否知道它是否指向了一个合法的对象吗?如果能,叙述你的思路,如果不能说明原因。
使用if语句判断p 是否合法,如果为真 及存在指向一个合法对象,否则指向不合法对象
练习 2.24 在下面这段代码中为什么p合法而lp非法
int i =42;
void *p =&i; //void 类型的指针指向任意对象,当然也可以包括int
long *lp = &i;//long类型的指针不能使用 int的对象初始化,
练习 2.25 说明下面变量和值
a. int * ip,i,&r = i; // int指针p, int变量 i , int 引用r
b.int i,*ip=0; //int 变量 i, int 指针ip
c. int* ip,ip2;//int 指针 ip , int 变量ip2
- c++ primer第五版(中文)习题答案 第二章第三节-复合类型
- c++ primer第五版(中文)习题答案 第十章第三节第二小节-lambda表达式
- c++ primer第五版(中文)习题答案 第二章第五节-处理类型
- c++ primer第五版(中文)习题答案 第十章第三节第四小节-参数绑定
- c++ primer第五版(中文)习题答案 第十章第三节第一小节-向算法传递函数
- c++ primer第五版(中文)习题答案 第十章第三节第三小节-lambda捕获和返回
- c++ primer第五版(中文)习题答案 第二章第一节-基本内置类型
- c++ primer第五版(中文)习题答案 第三章第二节-标准库类型string
- c++ primer第五版(中文)习题答案 第十章第五节第二三小节-算法形参合命名规范
- C++Primer 中文版 第五版 第二章课后习题答案
- c++ primer第五版(中文)习题答案 第二章第二节-变量
- C++Primer中文(第五版)习题答案(英文)
- c++ primer第五版(中文)习题答案 第十章第二节第一小节-只读算法
- c++ primer第五版(中文)习题答案 第十章第四节第二小节-iostream迭代器
- c++ primer第五版(中文)习题答案 第二章第四节-const限定符
- c++ primer第五版(中文)习题答案 第二章第六节-自定义数据结构
- c++ primer第五版(中文)习题答案 第十章第五节第一小节-5类迭代器
- c++ primer第五版(中文)习题答案 第三章第五节-数组
- unity3d 播放视频
- 小波函数
- Oracle常用的数据操作函数
- 硬盘和显卡的访问与控制(二)——《x86汇编语言:从实模式到保护模式》读书笔记02
- Copy List with Random Pointer
- c++ primer第五版(中文)习题答案 第二章第三节-复合类型
- 【bzoj4152】【AMPPZ2014】【The Captain】【最短路】
- 【黑马程序员】栈内存与堆内存
- CheungSSH运维自动化软件 批量管理上千台服务器 堡垒机
- Unity3D 提高视频movie视频播放的质量
- 在使用startActivityForResult时需要注意的问题
- CF542D
- hdoj 2529 Shot 【物理题】&&【物理题好无力】
- 时间和日期选择器DatePicker和TimePicker的使用