指針數組、數組指針、二重指針

---指針數組與數組指針
(1)指針數組的實質是一個數組,這個數組中存儲的內容全部是指針變量。
(2)數組指針的實質是一個指針,這個指針指向的是一個數組。
int *p[5]; int (*p)[5];    int *(p[5]);
總結:(第一步:找核心);(第二步:找結合);(第三步:繼續向外結合直到整個符號完)。
第一個:int *p[5]; 核心是p,p是一個數組,數組有5個元素大,數組中的元素都是指針,指針指向的元素類型是int類型的;整個符號是一個指針數組。
第二個,int (*p)[5];
核心是p,p是一個指針,指針指向一個數組,數組有5個元素,數組中存的元素是int類型; 總結一下整個符號的意義就是數組指針。

二重指針是C語言給程序員提供的一種編譯時的查錯機制。
---二重指針的用法
(1)二重指針指向一重指針的地址
(2)二重指針指向指針數組的
 
---二維數組的下標式訪問和指針式訪問
(2)二維數組的兩種訪問方式:以int a[2][5]爲例,(合適類型的)p = a;
a[0][0]等同於*(*(p+0)+0);     a[i][j]等同於 *(*(p+i)+j)
 
數組指針的用法:
int a[2][5]={{1,2,3,4,5,},{6,7,8,9,10}};
int (*p)[5];p=a;   //等同於p=&a[0];
int *p1=&a[1]; //不可以
int *p1=a[1];// 等同於  int *p1=&a[1][0]; 
*(p1+2)指的就是a[1][2];
 (此圖源自網友,在此表示感謝O(∩_∩)O~)
 
  1. #include <stdio.h>
  2. int a[2][4]={{1,2,3,4},{6,7,8,9}};
  3. int main(void)
  4. {
  5. printf("%d %p \n", a[0][0],a);
  6. printf("%d %p \n", *(a[0]+1),a[0]+1);
  7. printf("%d %p\n", *(a+1)[0],(a+1));
  8. return 0;
  9. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章