int data[3][4]= ,,};
定義了乙個三行四列的陣列
這個二維陣列可以解釋為:
有3個指向陣列的指標, 每個指標指向乙個 陣列, 每個陣列包含 4 個int 元素.
假如此時有乙個sum 函式, 作用是計算這個二維陣列的和
那麼呼叫sum函式時, **應為 sum( data , int size);
那麼 sum函式的原型是什麼呢:
原型如下: (原型即函式的定義)
int sum(int (*ar2)[4] , int size );
為什麼將二維陣列作為形參時, 只有第乙個方括號需要用符號表示, 而第二個方括號用具體的常量表示呢?
原因如下:
當 **寫出int data[3][4]時, data就會被認為是乙個陣列的指標, 指向一整個含有四個元素的陣列. 這樣的陣列共有3個
當理解了上面的這兩句話之後, 就可以理解為什麼sum需要這樣呼叫了
ar2 是乙個指向陣列的指標, data也是指向陣列的指標, 所以呼叫sum函式時, 可以直接傳遞data作為實參 , size 就是data陣列的長度, 就是3
其中, 括號不能少, 如果少加乙個括號, 變為 int *ar[4] **的意義將有很大的改變, 此時**的意義為:
只有乙個陣列, 這個陣列的內容是 四個 int* 指標.
可以形象的理解為 | int* | int* | int* | int* |
而int (*ar2)[4] 的意思為:
| 含有四個int元素的陣列 | 含有四個int元素的陣列 | 含有四個int元素的陣列 | 含有四個int元素的陣列 |
為了更加便於理解, 可以將int sum(int (*ar2)[4] , int size ); 改寫為
int sum(int ar2[4] , int size );
這樣寫的可讀性更強. 可以輕鬆的理解為, 這是乙個二維陣列, 只是行數沒有指定, 值為空, 陣列名為ar2, 而陣列的實際長度, 需要由size 指定.
但是不論哪一種寫法 , 他們都有相同的意義:
ar2是指標, 而不是陣列 !
C 陣列 二維陣列 函式引數
一維陣列 1 include 2 using namespace std 3int main 4 7 通過指標的方式訪問陣列 8 int p numbers 9 cout 普通指標的方式訪問 n 10for int i 0 i 5 i 11 cout p i 12 cout 13 14 在這裡面nu...
二維陣列與二維指標
1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...
二維陣列與二維指標
一.指標與二維陣列 以martix 3 4 為例 1.二維陣列的本質 int martix 3 4 int martix 3 4 int 4 martix 3 令int 4 為type,type martix 3 為含有三個元素的陣列,每乙個元素型別為int 4 int 4 是乙個擁有4個int型別...