C++语言程序设计

下面的语句
int *ptr;
定义了一个指向整型数据的指针变量，该指针变量的变量名是ptr。该定义在内存中有如下含义：在内存中有一个存储单元ptr，它里面存放了另外一个整型数据所在内存的地址。如下图所示：

| 图7-3

下面都是指针定义的例子：
float *pf; //定义了一个指向float型变量的指针pf
char *pc; //定义了一个指向char型变量的指针pc
char (*pch)[10]; //定义了一个指向10个char元素组成的数组的指针pch
int (*pi)(); //定义了一个返回值为int型的函数的指针pi
double **pd; //定义了一个指向指针的指针pd，被指向的指针指向
//一个double型变量
在定义指针变量时要注意两点：
（1）变量名前面的"*"，表示该变量为指针变量，但"*"不是变量名的一部分。
（2）一个指针变量只能指向同一个类型的变量。如前面定义的pf 只能指向浮点变量，不能时而指向一个浮点变量，时而又指向一个字符变量。
在定义了一个指针后，系统会为指针分配内存单元。各种类型的指针被分配的内存单元上大小是相同的，因为每个指针都存放的是内存地址的值，所需要的存储空间当然相同。
下面通过实例说明指针的含义：
int n = 100;
int *p = &n;
这里首先定义了一个int型变量n，并初始化为100，然后定义了一个指针变量p，它指向该int 型变量。变量n的地址是通过取地址运算"&"得到的，并赋给指针变量p。也就是说，&n就表示int型变量n的地址，并把它作为p的初值。这样，p就成了指向变量n的指针，如下图所示：

| 图7-4

我们假设变量n的地址是1000，指针变量p的地址是2000，n的值为100（已知）。由于语句"*p=&n;"是把变量n的地址赋给了指针p，所以指针p的数据值为1000（n的地址）。