演習2.18
#include<iostream>
int main()
{
int i = 5;
int j = 6;
int* pi = &i;
pi = &j;//更改指针的值
*pi = 7;//更改指针所指对象的值
}
演習2.19
ポインター自体はオブジェクトであり、ポインターの割り当てとコピーが可能であり、ポインターのライフサイクル中に複数の異なるオブジェクトを連続して指すことができます。
ポインタを定義するときに、ポインタに初期値を割り当てる必要はありません。ブロックスコープで定義されたポインタが初期化されていない場合、そのポインタの値も不確定になります。
参照はオブジェクトではなく、オブジェクトにエイリアスを提供します。参照を定義するとき、プログラムは参照を初期値にバインドします。これは、参照が常にバインドされているため、初期化する必要があるためです。
演習2.20
#include<iostream>
int main()
{
int i = 42;
int* p1 = &i;
*p1 = *p1 * *p1;
}
ポインタp1はiのアドレスを指し、p1が指す値は、元のp1が指す値の2乗に変更されます。
演習2.21
(a)不正な、double型のポインターは、非double型の値を指すことはできません
(b)不正な、アドレスを指す必要があります
(c)正当な
演習2.22
p为int型的指针
第一行判定p指针本身的值,本身有指向的值所以表达的条件值未true
第二行判定p指针指向的值,此条件值取决于int型的值
演習2.23
可以,用if条件句判断指针本身,若指针拥有一个合法值,就能用在条件表达式中
演習2.24
p为void类型,可以存放任意对象的地址
lp类型为long与int类型不符