一直以来写程序,我都喜欢用数组下标来引用数组元素,因为比较直观,虽然知道可以用指针变量来引用数组元素,但是总感觉不太理解,不敢乱用,今天抽空看了下教材,有一点感悟,特摘抄过来。
摘自谭浩强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 }
方法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 }
方法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 }
比较:方法1和方法2执行效率是相同的,C编译系统先将a[i]转换成*(a+i)处理,即先计算元素地址,较费时。
方法3,用指针变量直接指向元素,不必每次都重新计算地址,p++这种自加操作是比较快的,此方法效率最高。