1. 程式人生 > >二維陣列作為函式引數傳遞(C++)

二維陣列作為函式引數傳遞(C++)

有時候我們也許會不明白為什麼C++中的陣列宣告的時候下標是需要一個常數,而不能是一個變數吶?也許STL模板庫中的向量可以解決變數作為下標的陣列宣告方式,為了節約一些記憶體或者是提高一些效能,也為了功能不重複,故而陣列中的下標採取了常量的方式。

int a[5]; //可行的

const int MAX=10;
int b[MAX]; //可行的

int max=5;
int c[max];  //不可行

二維陣列的宣告也是類似的,但是當我們將陣列作為函式引數進行傳遞的時候,一維陣列的傳遞和二維陣列的傳遞是不同的。

     ①. 一維陣列:可以不說明陣列大小,但在其內部無法獲取傳入的陣列的大小,陣列傳入函式的時候已經退化為一個指標。
     ②. 二維陣列:可以不說明陣列行的下標,但是必須說明陣列的列的下標。

實際情況卻是有些時候我們需要二維陣列,但是又不知道它的行數或者列數的情況下,我們可以採用下列的方法來建立一個二維陣列。

①.知道列數利用動態分配建立一個行數為變數的二維陣列

int (*p)[5];  //p為二維陣列變數名,5是指向的二維陣列的列數
p=new int[n][5];   //n可以是一個變數

②.不知道行數和列數可以利用一個函式建立一個二維陣列。由於該函式傳入引數為二級指標的引用,不瞭解二級指標引用的話可以參考寫的關於指標引用的文章。
二級指標和指標引用函式傳參(C++)

void Make_Two_Array(int **&p,int row,int
col) {//傳入一個二級指標的引用 p=new int* [row]; //申請row個指向一維陣列的指標 for(int i=0;i<row;i++) { p[i]=new int[col]; //申請row個數組,每個陣列長度為col } }

建立的二維陣列結構圖示如下:
二維陣列結構:
這樣的一個二維陣列刪除函式如下:

    void Delete_Two_Array(int **&p,int row)
    {
        for(int i=0;i<row;i++)
        delete []p[i]; //刪除所有的行陣列空間,p[i]為指標變數,前面的[]代表指向的是一個數組空間
delete []p; //刪除p指向的列空間 p=NULL; }