c語言裡面定義了二維陣列
int arr[100][200];
那arr就是乙個指標,指標型別是什麼呢?是int(*)[200]。
所以最自然的是用下面的func2(int (*a)[200]) 或func3(int a[200]),這樣main函式呼叫的時候直接用func2(arr)或func3(arr)就可以了。這裡的a是乙個指標,指向乙個int陣列,這個陣列有200個元素。
當然也可以用func0(int *a),但func0裡面不能直接用a[i][j],因為編譯器不認識。
訪問a[i][j]要用*(a + 200 * i + j)。
也可以用func1(int **a),這是要注意先把a轉換為一維的(int *)陣列,然後再用*((int *)a + 200 * i + j)來訪問。
#include void func0(int *a)
void func1(int **a)
void func2(int (*a)[200])
void func3(int a[200])
int main()
擴充套件到3維陣列怎麼辦呢?假設我們定義了int arr[100][200][300]。
實際上類似func2(), func3(),我們可以用
func2(int (*a)[200][300])
或func2(int a[200][300])
當然也可以用類似func0()或func1()的二維或三維指標來搞定。
二維陣列作為形參
以下是網上摘抄的一段 首先,我引用了譚浩強先生編著的 c程式設計 上面的一節原文,它簡要介紹了如何將二維陣列作為引數傳遞,原文如下 略有改變,請原諒 原文開始 可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以指定所有維數的大小,也可以省略第一維的大 明,如 void func i...
C語言 二維陣列作為函式引數
想來學c語言的人,都會覺得陣列並不是很難,一問c語言最難的是什麼?指標?結構體?今天我就以我們認為不難的陣列聊聊。上學的時候老師就告訴我們 乙個就想當與乙個 這句話有問題嘛?答案是沒問題。但是,就是因為這個沒問題,導致工作中有問題。乙個簡單的思考 int arr 4 5 int p arr 請問,有...
C語言二維陣列作為函式引數
設有整型二維陣列a 3 4 如下 0 1 2 3 4 5 6 7 8 9 10 11 它的定義為 int a 3 4 設陣列a的首位址為1000,各下標變數的首位址及其值如圖所示。前面介紹過,c語言允許把乙個二維陣列分解為多個一維陣列來處理。因此陣列a可分解為三個一維陣列,即a 0 a 1 a 2 ...