练习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.21
(a)非法,double类型的指针不能指向非double类型的值
(b)非法,指向的应该是地址
(c)合法
练习2.22
p为int型的指针
第一行判定p指针本身的值,本身有指向的值所以表达的条件值未true
第二行判定p指针指向的值,此条件值取决于int型的值
练习2.23
可以,用if条件句判断指针本身,若指针拥有一个合法值,就能用在条件表达式中
练习2.24
p为void类型,可以存放任意对象的地址
lp类型为long与int类型不符