二維陣列的引數傳遞

2021-07-09 05:47:38 字數 1089 閱讀 6537

二維陣列的引數傳遞

一、通過指標傳遞

前幾天在看演算法導論的時候遇到了乙個函式需要傳遞乙個二維陣列,例如 void function(int **a),或許你會和我一樣,這樣定義個乙個陣列,int a[2][2]。然後呼叫函式,但結果如何呢?

首先是呼叫的**:

#includeusing namespace std;

void function(int **a)

int main()

在vs2012上出現的錯誤提示,error c2664: 「function」: 不能將引數 1 從「int [2][2]」轉換為「int **」 與指向的型別無關;轉換要求 reinterpret_cast、c 樣式轉換或函式樣式轉換。既然不可以這樣子這樣呼叫,那又該怎麼呼叫呢?

解決的方法是動態申請乙個二維陣列,這樣就不用轉換,直接呼叫。如下圖所示。

也可以這樣子呼叫

當然乙個動態申請的二維陣列,也不能傳遞給形參是int a[2][2]這種形式的函式。錯誤提示,

error c2664: 「function」: 不能將引數 1 從「int **」轉換為「int [2]」 與指向的型別無關;轉換要求 reinterpret_cast、c 樣式轉換或函式樣式轉換。

二、通過陣列傳遞

當然還有另外的傳遞二維陣列的方法。例如,viod function(int a[2])或void function(int a[2][2]),都可以定義乙個陣列 int a[2][2]呼叫。這裡int a[2][2]作為形參可以省略寫成int a[2],但不能寫成int a這樣的形式。

引數傳遞二維陣列

cpp view plain copy void func1 intiarray 10 intmain 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。cpp view plain copy void func2 int parray 10 void func2 1 int parr...

引數傳遞二維陣列

來看 c primer 中給出的方法 void func1 int iarray 10 int main 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。void func2 int parray 10 void func2 1 int parray 編譯通過,無法呼叫 int ma...

引數傳遞二維陣列

來看 c primer 中給出的方法 cpp view plain copy void func1 intiarray 10 intmain 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。cpp view plain copy void func2 int parray 10 vo...