C++语言程序设计

7.1.2 指针变量的使用
假定pa指向pb（如图7-2），下面的表达式：
*pa
是获取pa指向的变量，即为pb。*称为间接运算符。它是单目运算符，有一个变量作为它的右操作数，其功能是获取指向变量的值。
*pa也能作为左值，即给pa指向的内容赋值。例如：
*pa=10；
在本例中，它与：
pb=10；
的效果是一样的。
C++编译器能够检查数据类型，如果把一个变量赋给一个类型不匹配的数据，可能会出现错误，指针也不例外。例如，如果ptr1和ptr2的定义如前，下面的语句就会出现编译错误：
ptr2=ptr1;
如果我们把ptr1强制转换成char*类型，再赋给ptr2，就可以了：
ptr2 = (char*) ptr1;
如果指针类型是void*类型，则可以与任意数据类型的匹配。例如7-1：
void指针在被使用之前，必须转换为正确的类型。例如：
int i = 99;
void *vp = &i;
而下面的语句会产生一个编译错误：
*vp = 3;
如果我们没有让指针变量赋值，指针指向的内容并没有意义。在C++中，有几个头文件定义了一个常量NULL（它的值为0），表示指针不指向任何内存单元。我们可以把NULL常量赋给任意类型的指针变量，初始化指针变量。例如：
int *ptr1=NULL;
char *ptr2=NULL;
NULL常用于基于指针的数据结构（例如链表）的末尾（参见第八章），处理这样的数据结构通常是用循环语句。遇到NULL指针时，循环停止。
注意：全局指针变量被自动初始化为NULL，局部指针变量的初值是随机的。我们编程错误常常出现在没有给指针赋初值。未初始化的指针可能是一个非法的地址，导致程序运行时出现"segmentation fault", "bus error", "system error 2" 等错误，而使程序运行终止。