引用一个数组元素可以有以下两种方法:
(1)指针法。有 *(a+i), *(p+i) 两种表现形式,都是用间接访问的方法来引用数组元素。
(2)下标法。有a[i] 和 p[i] 两种形式。在编译时这两种形式也要处理成 *(a+i) 或 *(p+i)
,即先按“a+i x(一个元素占用字节数)”计算出第 i 号元素的地址,然后通过指针运算
符 “ * ” 来引用该元素。
下面举个例子看一下这两种用法:
#include <stdio.h>
int main()
{
int a[10],i,*p;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%d ",*(a+i)); /*形式1:指针法之*(a+i)形式*/
printf("\n");
for(p=a;p<(a+10);p++)
printf("%d ",*p); /*形式2:指针法之*p形式*/
printf("\n");
for(i=0;i<10;i++)
printf("%d ",a[i]); /*形式3:下标法之a[i]形式*/
printf("\n");
for(p=a,i=0;i<10;i++)
printf("%d ",p[i]); /*形式4:下标法之p[i]形式*/
printf("\n");
return 0;
}
程序运行结果如下:
1 2 3 4 5 6 7 8 9 10 ,然后按 enter 键得到
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
上述形式 1 和形式 3 的执行效率是相同的,都要按 a+i 计算地址,然后找出该单元中的值。
由于 p++ 这样的自增操作无须每次都重新计算地址,所以形式 2 最快。但其中的 *p 究竟
是哪个元素,不易看出,而下表法更直观些。