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

时间:2022-01-31 02:44:32

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

 

摘自谭浩强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("\n");
11      for(i =0; i<10; i++)
12      {
13              printf("%d",a[i]);
14       } 
15      printf("\n");      
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("\n");
12       for(i=0; i<10;i++)
13      {
14            printf("%d",*(a+i));
15      }  
16      printf("\n");
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("\n");
12       for(p=a; p<(a+10);p++)
13      {
14            printf("%d",*p);
15      }  
16      printf("\n");
17 }  
View Code

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

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