【整理】數組與指針

1.數組與函數參數數組

(1)一維數組  P180函數

1 int s[10];
2 void sort(int a[],int n);
3 sort(s,10);

 (2)二維數組或多維數組  P185spa

1 int fun(int a[3][10]);  //正確
2 int fun(int a[][10]);  //正確,第二維以及其餘高維不能省略
3 int fun(int a[3][]);  //錯誤

 2.數組與指針設計

(1)一維數組  P204指針

1 int a[5];    //定義指向int型數據的指針
2 int *pi;    
3 pi=a;
4 int (*pa)[5];//定義指向含有5個int型數據的數組的指針,數組指針
5 pa=&a;

     ps:其中第2行和第3行,等價於int *pi=&a[0];等價於int *pi=a;code

  由於數組名錶明數組的首地址,即第一個數據的地址,即a等價於&a[0],P201blog

  舉例:程序設計

  a[3]=10; 等價於 *(pi+3)=10; 等價於 pi[3]=10; 等價於 (*pa)[3]=10;class

(2)二維數組或多維數組  P204-205遍歷

 1 int a[3][4],*pa;
 2 int (*pb)[4],i;
 3 //列指針,pa++從a[0][0]到a[0][1]
 4 pa=&a[0][0];     //等價於pa=a[0];由於a[0][0]是a[0]數組的首地址
 5 //行指針,pb++從a[0]數組指向a[1]數組
 6 pb=&a[0];         //等價於pb=a;由於a[0]是a數組的首地址
 7 for(i=0;i<12;i++)
 8     *pa++=i;      //遍歷12個元素,優先級++大於*(取值)
 9 for(i=0;i<3;i++)
10     (*pb++)[i]=(i+1)*(i+1);      //僅訪問a[0][0],a[1][1],a[2][2]

  3.數組指針  P205

1 int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
2 int (*p)[4];
3 int i,j;
4 p=a;
5 for(i=0;i<3;i++)
6 {
7     for(j=0;j<4;j++)
8         printf("%2d",*(*(p+i)+j));     //遍歷每一個元素     
9 }

  小結:

  a[i][j] 等價於 *(*(a+i)+j) 等價於 *(a[i]+j) 等價於 p[i][j]

 

——部分來自向豔編著《C語言程序設計》

相關文章
相關標籤/搜索