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

2 0
原创粉丝点击