C++语言程序设计

前面已经提到过，C++中数组和指针是密切相关的。可以用指针访问数组的元素，这是因为数组名实际上就是指针，它指向数组的第一个元素。上面的例子实际上就是用指针访问数组元素，下面就这个问题，我们作进一步的说明。对于数组：
int ara[5] = {10, 20, 30, 40, 50};
在内存中是这样存储的：

| 图7-16

由于数组名是数组的首地址，它是一个常量，所以不能改变。但是，对数组名可以在表达式中参与算术运算，例如：ara 指向 ara[0]，表达式ara+1 指向 ara[1]，…
指针可以象数组那样使用下标，这进一步表明了指针和数组的密切关系。例如，p是一个数组的指针，p[k]则指向该数组的第k+1个元素，所以，p[k]与*(p+k)是等价的。
此外，也可以用指针对多维数组进行访问。以二维数组为例，
int m[3][3];
可以看成是以m[0]、m[1]、m[2]为首地址的三个一维数组，每个一维数组具有三个整型元素。如果定义了下面的指针数组：
int *pm[0];
pm[0]=m[0];
pm[1]=m[1];
pm[2]=m[2];
那么，指针数组的三个元素（即三个指针）分别指向三个一维数组。这样，就可以通过这三个指针对二维数组进行访问。例如："m[2][0]=*(pm[2]);m[2][1]=*(pm[2]+1)"。
根据以上叙述，引用一个数组元素可以用：
（1） 下标法。即用a[i]形式访问数组元素，在前面介绍数组时都是采用这种方法。
７（2） 指针法。即采用*(a+i)或*(p+i)形式，用间接访问的方法来访问数组元素，其中a是数组名，p是指向数组的指针变量，其初值为p=a。