对于数组元素的访问,可以使用下标,也可以使用指针变量,移动指针可以指向数组中的任意一个元素。
例如,一维数组和指针的如下定义
int a [5] = {1,2,3,4,5},*p;
p = a;
因为p是指向一维数组的首元素的指针。因此上述关系等价于
int a [5] = {1,2,3,4,5},*p;
p = &a[0];
我们可以利用运算符+,*,[]建立指针与一维数组的关系,如下
注意p[i]表达式中p不是数组名,是指针,这是指针的下标表示法
下面介绍四种访问数组元素的四种等价方式
#include<stdio.h>
int main()
int i,a[5]= {1,2,3,4,5},*p=&a[0];
printf("\na[i] :");
for(i=0;i<5;i++)
printf(" %3d" ,a[i]); /*常规下标法访问数组元素*/
printf("\n*(a十i):");
for(i=0;i<5;i十+)/*数组名作为指针访问数组元素*/
printf("%3d",*(a+i));
printf("\npLi]n);
for(i=0;i<5;i++)/*指针变量下标法访问数组元素*/
printf(" %3d" ,p[i]);
printf("\n*(p+i):");
for(i=0;i<5;i十十)/*使用指针变量访问数组元素*/
printf("%3d", *(p+i));
return O;
a和p是有差别的,数组名a是一个指针常量,不可赋值,不能进行“a++”操作;p是一个指针变量,可赋值,可以进行“p++”操作。如下
#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5},*p-a;
printf("\n *p十十:");
for( ;p<a+5;)
/*此处,*p十十不能用*a十十替换*/
printf("%3d",*p++);
return 0;
}