C语言中的数组操作,其实是和指针操作密不可分的。实际上在编译的时候,数组的操作也都回转换为指针操作的。我们可以这样来写:int a[];int *p = a;这样,p就是指向数组a中第0个元素的指针;但是如果写:int *p = &a,在ANSI C中却是非法的,因为&a是一个指向数组的指针,而p声明为一个指向整形变量的指针,类型不匹配。大多数早期版本的C语言实现中,并没有所谓“数组的地址”这一概念,因此&a或者被视为非法,或者就等于a。
*a即数组a中下标为0的元素的引用。如:*a = 20;即把a[0]赋值20。同样道理,*(a+1)是数组a中下标为1的元素的引用,以此类推。概而言之,*(a+i)即数组a中下标为i的元素的引用:这种写法是如此常用,因此它被简记为a[i]。
正式这一概念让许多C语言新手难于理解。实际上,由于a+i和i+a的含义一样,因此a[i]和i[a]并没有什么区别。这是一个陷阱。
下面是我写的测试程序:
#include
using namespace std;
int main()
{
int a[10];
for(int i=0;i < 10;i++)
a[i] = i;
for(i = 0;i < 10;i++)
cout << i[a] << '/n';
return 0;
}