练习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的变量