二維陣列的引數問題
二維陣列作為引數:
看這樣一個例子:
老師之前講過,二位陣列作為引數,寫形參為:int (*arr)[][4]
主函式中呼叫該函式:
這樣寫,做了:
這樣寫,錯了:
這樣寫,還是錯了:
這樣再寫,還是錯了:
那我加個過好,再寫,還錯:
行,那我補一個[4],恩???還錯!??
到底怎麼才行,我就不信了。
恩,還不行。表示式必須是指向物件的指標型別。
恩,我快要…
int型別的實參與int (*)[][4]型別的形參不相容。。。
找到錯誤了,show函式傳的引數錯了。
應該這樣寫,編譯就通過了:
我知道錯在哪裡了,在主函式中定義一個二維陣列並且初始化。使用show函式,show的引數為arr,即陣列名,根據陣列名來寫函式的形參。而我之前的思路錯在先先函式的形參,然後再呼叫函式時再寫實參,這樣就錯了,error:實參和形參匹配。
下面看主函式:
int main()
{
int arr[4][4] = {1};
Show(arr);
return 0;
}
Arr為二維陣列,show的形參為陣列名。那麼就要搞清楚二維陣列的陣列名錶示什麼。
先看一位陣列:
例如:arr[4] = {1,2,3,4};
資料名字 陣列型別
Arr int * //陣列名錶示陣列首元素地址
Arr +1 int *
Arr[1] int
Arr[1]+1 int
二維陣列:int brr[3][4]
陣列名字 資料型別
Brr int (*p)[4] //指向二維陣列的指標
Brr[0] int *p
Brr[0][0] int
Brr[0] + 1 int *p[4]