为什么用指针来引用数组元素?

一直以来写程序,我都喜欢用数组下标来引用数组元素,因为比较直观,虽然知道可以用指针变量来引用数组元素,但是总感觉不太理解,不敢乱用,今天抽空看了下教材,有一点感悟,特摘抄过来。

摘自谭浩强C程序设计(第三版)

引用一个数组元素,可以用:

(1)下标法:如a[i]形式;

(2)指针法,如*(a+i)或*(p+i),其中a是数组名,p是指向数组元素的指针变量,其初值p = a;

输出数组中的全部元素:数组a,整型,10个元素

方法1:下标法

 1 #include <stdio.h>
 2 void main()
 3 {
 4      int a[10];
 5      int i;
 6      for(i =0; i<10; i++)
 7     {
 8             scanf("%d",&a[i]);
 9      }
10      printf("
");
11      for(i =0; i<10; i++)
12      {
13              printf("%d",a[i]);
14       } 
15      printf("
");      
16 }        
View Code

方法2:通过数组名计算数组元素地址,找出元素的值

 1 #include <stdio.h>
 2 void main()
 3 {
 4      int a[10];
 5      int i;
 6      for(i = 0; i<10; i++)
 7      {
 8             scanf("%d",&a[i]);
 9 
10       }
11       printf("
");
12       for(i=0; i<10;i++)
13      {
14            printf("%d",*(a+i));
15      }  
16      printf("
");
17 }    
View Code

方法3:用指针变量指向数组元素

 1 #include <stdio.h>
 2 void main()
 3 {
 4      int a[10];
 5      int i,*p;
 6      for(i = 0; i<10; i++)
 7      {
 8             scanf("%d",&a[i]);
 9 
10       }
11       printf("
");
12       for(p=a; p<(a+10);p++)
13      {
14            printf("%d",*p);
15      }  
16      printf("
");
17 }  
View Code

比较:方法1和方法2执行效率是相同的,C编译系统先将a[i]转换成*(a+i)处理,即先计算元素地址,较费时。

方法3,用指针变量直接指向元素,不必每次都重新计算地址,p++这种自加操作是比较快的,此方法效率最高。

原文地址:https://www.cnblogs.com/victoria-c/p/6256356.html