二維陣列的申請和呼叫問題

2021-06-21 12:56:14 字數 741 閱讀 4086

記得在學資料結構時,寫偽**遇到二維陣列會這樣寫void fun(int a,int m,int n),m代表行數,n代表列數。於是在vc++中也這樣寫,想當然的以為是對的,可是編譯不通過,a是錯誤的。

之前寫的程式大部分都是一維陣列:

申請一維陣列int *a=new int[10];

函式宣告void fun(int *a,int n)或者void fun(int a,int n)

函式呼叫時直接fun(a)。

但是對於二維陣列就不一樣了。假設要申請m行,n列的陣列a[m][n];

int **a=new int *[m];

for(int i=0;ia[i]=new int[n];

一、函式宣告中void fun(int **a,int m,int n);

呼叫這個函式二維陣列必須是動態申請的,直接呼叫fun(a,m,n);

不能傳入靜態定義的陣列例如b[3][3]=,呼叫fun(b,3,3)是錯誤的。這裡我也不知道為什麼,反正編譯不通過。

二、二維陣列作為形參有兩種方式,1.已知列數;2.轉換為一維陣列呼叫。

1.函式宣告:void fun(int a[4])   //這裡必須事先知道陣列的列數,如果之前不知道,這樣做就不行了。

函式呼叫:int a[3][4],直接呼叫fun(a),就可以了。

2.函式宣告:void fun(int *a,int m,int n)

函式呼叫:int a[3][4],呼叫時fun(*a,3,4)。

二維陣列如何申請和釋放

1,二維陣列的申請 typedef struct dictht dictht typedef struct dictentry v struct dictentry next dictentry 假如有這樣的乙個二維陣列,dictentry table,如何來申請呢?首先要明白dictentry t...

動態申請和釋放乙個二維陣列

動態申請乙個二維陣列也很常見,下面是常見的兩種形式。方法1 unsigned char pimg new unsigned char m for int i 0 i 方法2 unsigned char pimg new unsigned char m unsigned char arr new un...

C 動態申請二維陣列

剛學習,做下總結。以下是我的理解,如有錯誤歡迎指出。申請 int a 乙個指向指標的指標。int n m cin n m a new int n 申請乙個n個元素的一維陣列 作為行 for int i 0 i 關係如下假設 n 3 m 4 先申請乙個一維陣列,陣列的每個元素都是乙個指標變數 該陣列的...