C++Primer2.3.2 练习和答案

练习2.18:编写代码分别更改指针的值以及指针所指对象的值。

int i=23;
int *p=nullptr;
p=&i;
*p=13;

 

 

练习2.19:说明指针和引用的主要区别。

答案:指针是保存所指向对象的地址其本身是一个对象,引用是对象的别名其本身不是对象。

 

练习2.20:请叙述下面这段代码的作用。

int  i=42;

int *p1 = &i;

*p1 = *p1 * *p1;

答案:将指针pl指向i,并将其指向对象值改为42*42;

 

练习2.21:请解释下述定义。在这些定义中有非法的吗?如果有,为什么?

int  i=0;

(a)double*dp=&i;

(b)int    *ip=i;

(C)int   *p=&i;

答案:

(a)非法,double类型的指针不能指向int型对象

(b)不合法,int型变量不能对指针赋值。

(c)合法。

 

练习2.22:假设p是一个int型指针,请说明下述代码的含义。

if (p) // ...

if (*p) // ...

答案:判断p的值,判断指针p指向的对象值

 

练习2.23:给定指针p,你能知道它是否指向了一个合法的对象吗?如果能,叙述判断的思路;如果不能,也请说明原因。

答案:能,判断p是否为nullptr

 

练习2.24:在下面这段代码中为什么P合法而lp非法?

int  i=42;

void *p= &i;

long *lp = &i;

答案:void*可以适应任何类型的指针,而long只能指向long的变量

上一篇:系统编程概述(一)


下一篇:[论文阅读笔记42]BioSyn