C 函式與二維陣列

2022-08-26 12:15:08 字數 1060 閱讀 4164

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型別...