C語言中一維陣列與二維陣列
int arr [4] //定義了一個一維陣列,長度為4;說明以下三個分別是什麼型別;
(1)arr //型別為int *,表示陣列元素首地址,即圖中箭頭指向的位置。
(2)arr+1 //型別為int *,表示陣列元素首地址+1,即圖中箭頭指向的位置。
(3)arr [0] //型別為int ,表示第一個元素,即圖中紅色的格子。
int brr [3][4] //表示定義了一個3行4列的二維陣列,說明以下三個分別是什麼型別;
(1)brr //型別為int(*p)[4], 把一個二維陣列想象成一個特殊一維陣列並遵循行優先原則,那麼也表示陣列首地址,int(*p)[4]的含義就是整型指標p指向有4個
(2)brr+1//型別為int * p[4],同樣把二維陣列想象成一維陣列,那麼brr+1就是首地址+1,即圖中箭頭指向的位置。
(3)brr [0]//型別為int *,brr[0]==arr,即圖中紅色的格子。
(4)brr [0]+1//型別為int *,因為指標加法不會改變指標的型別,即圖中黃色的格子。
(5)brr [0][0]//型別為int,表示的是陣列的第一個元素,即圖中的黑色粗框。
總結:遇到複雜型別式子
1.優先順序
2.看到以下符號
[ ] 陣列要考慮有幾個格子;每個格子的資料型別;
()函式要考慮引數列表,返回值;
* 指標要考慮指標指向的是什麼
練習:
(1)int(* p)[4] ()的優先順序比 * 優先順序低,那麼表示的是指標p指向的是有4個格子的陣列;
(2)int * p [4] [ ]的優先順序比 * 優先順序高,那麼表示的是有4個格子的陣列p,儲存的是指標。