我们在上一章说到,在向函数传递数组参数的时候,实质上是传递数组首元素的地址。那么数组和指针有着什么样的关系吗?
数组名并不是一个普通的变量,而是一个指向数组首元素的指针。也就是说,我们可以用数组名来初始化一个对应类型的指针。既然如此,经过初始化的指针能否代替原来的数组名呢?答案是肯定的。
下面我们来看一段程序,了解数组名和指针的用法:(程序8.5)
#include "iostream.h"
int main()
{
int a[6]={5,3,4,1,2,6};
int *aptr=a;
for (int i=0;i<6;i++)
{
cout <<a[i] <<aptr[i] <<*(aptr+i) <<*(a+i) <<endl;
}
return 0;
}
运行结果:
5555
3333
4444
1111
2222
6666
根据上面的这段程序,可以知道a[i]、aptr[i]、*(aptr+i)、*(a+i)都能够访问到数组的元素。所以,我们说上述四者是等价的。虽然数组名是指针,但它是一个指针常量。也就是说,不带下标的数组名不能作为左值。
指针是一种数据类型,所以,我们可以用指针类型来创建一个数组。声明一个指针数组的语句格式是:
指针类型 * 数组名[常量表达式];
对指针数组的操作和对指针变量的操作并无不同,在此不作赘述。