1. 程式人生 > >關於二維陣列作為引數傳遞給函式的問題

關於二維陣列作為引數傳遞給函式的問題

剛碰到要寫一個函式func,要傳入一個二維陣列給該函式,於是寫成func(int a[][]);但馬上又發現將二維陣列傳給函式時必須指定第二維的維數,因為函式傳遞的是一個指向一個一維陣列的指標,這個一維陣列中儲存有著若干元素的陣列,所以函式必須要知道這個指標所指向物件的資訊,在這裡表現為這個被指向的一維陣列中的基本元素(即陣列)所含元素的個數,也就是說必須指定第二維的維數,不然編譯器不知道該如何定位二維陣列中的元素。

於是就寫成func(int a[][n]);但是問題又來了,這個n是取決於使用者輸入的,也就是說要在執行期才能知道n的確切數值,而編譯器要求在編譯期必須知道陣列元素的大小,於是就只有寫成如下這個不倫不類的東西  func(int** a); 這時如果要在func函式內操作“二維陣列”a,不能直接用下標a[i][j] ,(我也不知道

確切為什麼,可能是因為編譯器無法定址到這個元素,因為畢竟二維陣列和指向指標的指標在記憶體中的儲存方式還是有區別的嘛),所以如果我們要訪問陣列的某個元素,則必須自己做編譯器乾的事,即這樣:*((int *) a+n*i+j)其中n表示第二維長度,(感覺怪怪的,不知道還有沒更好的辦法),同時還有個地方要注意的就是,在呼叫func函式時,實參必須是int**型別的 ,如果定義的是a[i][j]這樣的型別,則需強制轉換func((int**)a);才能呼叫。

我覺得這樣的操作很不方便,不知道還有沒有更好的操作二維陣列做引數傳遞的方法,希望補充賜教。