C++语言程序设计

首先，我们需要明确一下指针的概念。
指针是一种数据类型，具有指针类型的变量称为指针变量。实际上，可以把指针变量（也简称为指针）看成一种特殊的变量，它用来存放某种类型变量的地址。一个指针存放了某个变量的地址值，就称这个指针指向了被存放地址的变量。简单地说，指针就是内存地址，它的值表示被存储的数据的所在的地址，而不是被存储的内容。
为了进一步说清楚指针的含义，需要明白数据在机器中是如何存储和访问的。我们知道，内存是按字节（8位）排列的存储空间，每个字节有一个编号，称之为内存地址，就象一个大楼里各个房间有一个编号一样。内存中存放的数据包括各种类型的数、地址，还有程序的指令代码，等等。保存在内存中的变量一般占几个字节，我们称之为内存单元，一个内存单元保存一个变量的值。不同的数据类型在机器内存中所占的内存单元的大小一般是不一样的，例如，整型数占两个字节，浮点数占4个字节等。但是，在同一个机器上，相同的数据类型占有相同大小的存储单元，而在不同的机器系统里，即使相同的数据类型所占的存储单元也可能是不一样的，例如，16位机器上，一个整型数占两个字节，而在32位机器上，一个整型数占4个字节。
为了访问某个单元中的数据，就必须知道该单元在内存中的地址。这跟我们的实际生活很类似，比如说，当我们要找某一个人的时候，就必须知道他的当前地址，否则，就无法达到目的。
在这里，务必弄清楚一个内存单元的地址与内存单元的内容的区别。
打个比方，为了打开一个A抽屉，有两种办法，一种是将A抽屉的钥匙带在身上，需要时直接找出该钥匙打开抽屉，取出所需的东西，另一种办法是，为安全起见，将该A抽屉的钥匙放在另一个抽屉B中锁起来。如果需要打开A抽屉，就需要先找出B抽屉中的钥匙，打开B抽屉，取出A抽屉的钥匙，再打开A抽屉，取出A抽屉中之物，这就是"间接访问"。指针变量相当于B抽屉，B抽屉中的东西相当于地址（如果把钥匙比喻成地址，不甚确切），A抽屉中的东西，相当于存储单元的内容。
直接访问与间接访问的区别参见下图。为了表示将数值7送到变量的存储单元中，有两种方法：（1）直接将7送到变量i所占的单元中，参见图7-1(a)。（2）将7送到变量i-pointer所"指向"的存储单元中，参见图7-1(b)。

| 图7-1
| (a) | (b)

所谓"指向"就是通过地址来体现的。i_pointer 中的值为2000，就是i的地址，这样就在i_pointer和i之间建立起一种联系，即通过 i_pointer就能知道i的地址，从而找到变量i的内存单元。上图中以箭头→表示这种"指向"关系。
既然指针变量的值是一个地址，那么这个地址不仅可以是变量的地址，也可以是函数的地址。在一个指针变量中存放一个数组或一个函数的首地址有何意义呢？因为数组元素或函数代码都是连续存放的。通过访问指针变量取得了数组或函数存储单元的首地址，也就找到了该数组或函数。这样一来，凡是出现数组、函数的地方都可以用一个指针变量来操作。这样做，将会使程序的概念十分清楚，程序本身也精练、高效。