int arr[SIZE]={1,2,3,4};
int index;
for(index=0;index<SIZE;index++)
{
printf("arr[%d]=%d address=%p\n",index,arr[index],arr+index);
}
int *p=arr;
for(index=0;index<SIZE;index++)
{
printf("*(p+%d)=%d p+%d=%p\n",index,*(p+index),index,p+index);
}
getchar();
return 0;
以上代码展示了读取数组中元素的两种方式,第一种是常规的使用数组下标来读取。第二种方法是使用指针来读取数组。
通过第一中方法中打印出来的内容,我们可以认识到,数组名其实就是这个数组的首地址,即:arr=数组首地址;arr+1:数组第二个元素的地址;arr+2:数组第三个元素的地址,以此类推。。。
第二种方法我们使用指针访问代替了数组下标访问,我们将 arr(即数组的首地址)赋值给了指针 *p,所以 p就等于arr的首地址,p+1就等于arr的二个元素的地址,那么*p就相当于了arr[0],*(p+1)就相当于arr[1]。
我们从中可以得出一个结论:数组标记实际上是一种变相使用指针的形式。