數組元素的指針就是數組元素的地址。C語言中,數組名代表數組中首元素的地址,因此p=&a[0]等價於p=a,即把數組a的首元素的地址賦給指針變量p。
在指針指向數組時,可以對指針進行運算:
加一個整數:p+1;//指向同一數組的下一個元素
減一個整數:p-1;//指向同一個數組的上一個元素
自加運算:p++,++p; 自減運算:p--,--p;
兩個指針相減:p1-p2;(當p1和p2指向同一數組元素時)//計算p1和p2所指元素的相對距離
例1:利用指針,輸出數組中的全部元素。
1 int main() 2 { 3 int a[10]; 4 int *p,i; 5 printf("please enter 10 integer numbers:\n"); 6 for(i=0;i<10;i++) 7 { 8 scanf("%d",&a[i]); 9 } 10 for(p=a;p<(a+10);p++) 11 { 12 printf("%d,",*p); 13 } 14 printf("\n"); 15 return 0; 16 }
1 int main() 2 { 3 int i,a[10],*p=a; 4 printf("please enter 10 integer numbers:\n"); 5 for(i=0;i<10;i++) 6 scanf("%d",p++); 7 p=a; 8 for(i=0;i<10;i++,p++) 9 printf("%d, ",*p); 10 printf("\n"); 11 return 0; 12 }
兩種方式,體現指針使用的靈活多樣,我個人感覺這也是指針之所以難理解的原因。
例2:將數組a中n個整數按相反順序存放。
1 int main() 2 { 3 void inv(int x[],int n); 4 int i,a[10]={21,3,56,25,5,7,33,78,2,9}; 5 printf("The original array:\n"); 6 for(i=0;i<10;i++) 7 printf("%d ",a[i]); 8 printf("\n"); 9 inv(a,10); 10 printf("The array has been inverted:\n"); 11 for(i=0;i<10;i++) 12 printf("%d ",a[i]); 13 printf("\n"); 14 return 0; 15 } 16 void inv(int x[],int n) 17 { 18 int temp,i,j,m=(n-1)/2; 19 for(i=0;i<=m;i++) 20 { 21 j=n-1-i; 22 temp=x[i]; 23 x[i]=x[j]; 24 x[j]=temp; 25 } 26 return; 27 }