回覆列表
  • 1 # 懂事聽話

    c++裡動態定義2維陣列方法為:

    定義二維指標

    分配”行指標“陣列

    為每行分配資料陣列

    使用二維陣列

    釋放每行的資料陣列 (不再使用該記憶體後,要手工完成記憶體的釋放)

    釋放”行指標“陣列

    參考程式碼:

    #include <iostream>#include <iomanip>using namespace std ;#define ROW 5#define COL 10int main(){ int **pp,i,j; pp=new int *[ROW]; //分配行指標陣列,返回陣列首地址給pp for( i=0;i<ROW;i++ ) pp[i]=new int[COL]; //為每行分配資料陣列 for( i=0;i<ROW;i++ ){ for( j=0;j<COL;j++ ) pp[i][j]=(i+1)*(j+1) ; //向二維陣列中儲存資料 } cout << "ARRAY"s ADDRESS: " << pp <<endl; for( i=0;i<ROW;i++ ){ cout << "ROW_"<<i+1<<""s ADDRESS: "<< pp[i] ; //輸出每行的地址 for( j=0;j<COL;j++ ) cout << setw(3)<<pp[i][j] ; //輸出陣列元素 cout <<endl ; } for( i=0;i<ROW;i++ ) delete []pp[i]; //釋放每行的指標 delete []pp ; //釋放指標陣列 return 0;}

    c++動態定義2維陣列,實際上是先分配一個指標陣列,然後再為每個指標陣列分配相應的資料陣列。與真正的二維陣列的差別是:

    二維陣列的儲存空間是在記憶體中連續的,實際上還是個一維陣列,只是將一維陣列分成了N段;而動態分配的二維陣列,其行指標陣列是一個連續的一維陣列,其中儲存的是一維指標,這些指標值不一定是連續的,與記憶體使用情況有關。

    從中還可以看出,動態二維陣列,比真正的二維陣列多了一個行指標陣列的多餘記憶體消耗。

    動態定義的二維陣列每一行的列寬可以是變化的(一般情況下是一樣寬的);真正的二維陣列每行的列寬必須且只能一樣。

    真正的二維陣列在其所定義的函式結束後,記憶體自動釋放;動態定義的二維陣列,需要用顯式的程式碼進行記憶體釋放。

  • 中秋節和大豐收的關聯?
  • 生活中有什麼待解決的痛點問題?