記得在學資料結構時,寫偽**遇到二維陣列會這樣寫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 先申請乙個一維陣列,陣列的每個元素都是乙個指標變數 該陣列的...