1,malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。c++中用new動態建立二維陣列的格式一般是這樣:2,對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。
3,因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。
4,c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體。
5、new可以認為是malloc加建構函式的執行。new出來的指標是直接帶型別資訊的。而malloc返回的都是void指標。
type (*p)[n] = new type [n];
其中,type是某種型別,n是二維陣列的列數。採用這種格式,列數必須指出,而行數無需指定。在這裡,p的型別是type*[n],即是指向乙個有n列元素陣列的指標。
還有一種方法,可以不指定陣列的列數:
int **p;
p = new int*[10]; //注意,int*[10]表示乙個有10個元素的指標陣列
for (int i = 0; i != 10; ++i)
這裡是將p作為乙個指向指標的指標,它指向乙個包含10個元素的指標陣列,並且每個元素指向乙個有5個元素的陣列,這樣就構建了乙個10行5列的陣列。
當陣列使用完畢,釋放空間的**是:
for(int i = 0; i != 5; i++)
delete p;
處理二維陣列,可以用降維或是二維法。
降維法是用一位陣列來接受二維陣列,將二維元素的首位址&a[0][0]作為引數,傳遞給函式,函式用int *接受。
二維法就直接用二維陣列來接受,但是需要指定列數。
如要想建立乙個[m][n]的二維陣列。
下面為通過動態建立乙個指標陣列的方法來動態建立二維陣列的方法。
c版本:
double **data;
data = (double **)malloc(m*sizeof(double *));
for(int j=0;j//這個指標陣列的每個指標元素又指向乙個陣列。
}
for (int i=0;ifor (i=0;i//先撤銷指標元素所指向的陣列
}
free(data);
c++版本:
double **data;
data = new double*[m];//設定行 或直接double **data=new double*[m]; 乙個指標指向乙個指標陣列。
for(int j=0;j
for (int i=0;i
for (i=0;i;
這種方法是通過先動態建立乙個指標陣列,然後為指標陣列的每個元素再動態指向乙個陣列的辦法來完成的。其建立過程與銷毀過程兩樣重要。
在銷毀的過程,先銷毀指標陣列每個元素指向的陣列,然後再銷毀這個指標陣列。
C 二維動態陣列的建立與刪除
c 中用new動態建立二維陣列的格式一般是這樣 type p n new type n 其中,type是某種型別,n是二維陣列的列數。採用這種格式,列數必須指出,而行數無需指定。在這裡,p的型別是type n 即是指向乙個有n列元素陣列的指標。還有一種方法,可以不指定陣列的列數 int p p ne...
C 二維動態陣列的建立與刪除
c 中用new動態建立二維陣列的格式一般是這樣 type p n new type n 其中,type是某種型別,n是二維陣列的列數。採用這種格式,列數必須指出,而行數無需指定。在這裡,p的型別是type n 即是指向乙個有n列元素陣列的指標。還有一種方法,可以不指定陣列的列數 int p p ne...
C 動態建立和刪除二維陣列
1.a ga n new a m n delete ga 缺點 n必須是已知 優點 呼叫直觀,連續儲存,程式簡潔 經過測試,析構函式能正確呼叫 2.a ga new a m for int i 0 i m i ga i new a n for int i 0 i m i delete ga i de...