很多情況下,在預編譯過程階段,陣列的長度無法預先知道,必須在程式執行時動態給出。但c++要求定義陣列時,必須明確給定陣列的大小,否則編譯無法通過。
靜態陣列是在棧上建立,不需要自行釋放空間,效率高,但是棧空間有限。
動態陣列new是在堆上建立,堆為自由儲存區(free store),需要自行釋放空間,效率低。
在c和c++中,動態陣列的分配方式略有區別:
new在內部做了三件事:
獲得一塊記憶體空間
呼叫建構函式
返回正確的指標
函式宣告的靜態陣列,無法通過return從函式返回。因為生存週期的問題,函式呼叫結束後,內部變數占用的記憶體就被釋放。如果想通過函式返回乙個陣列,必須在函式中採用new建立動態陣列,然後返回其首位址。
其原因可以解釋為:由於靜態陣列是在棧中申請的,而函式中的區域性變數也是在棧中的,而動態陣列是在堆中進行分配,所以函式返回後,棧中的變數記憶體被自動釋放,而堆中的變數如果沒有delete則不會自動釋放。
#include
using
namespace std;
intmain()
以下分別為c和c++中動態陣列
// c
class solution
dp[1]
=1; dp[2]
=2;for
(int i =
3; i <= n; i++
)int res = dp[n]
;free
(dp)
;return res;}}
;
// c++
class
solution
;for
(int i =
3; i <= n; i++
)int res = dp[n]
;delete
dp;
return res;}}
;
陣列及其應用
稀疏矩陣a b均採用三元組順序表表示,驗證實現矩陣a快速轉置演算法,並設計 驗證矩陣a b相加得到矩陣c的演算法。1 從鍵盤輸入矩陣的行數和列數,隨機生成稀疏矩陣。2 設計演算法將隨機生成的稀疏矩陣轉換成三元組順序表形式儲存。3 設計演算法將快速轉置得到的與相加得到的三元組順序表分別轉換成矩陣形式。...
結構體陣列及其應用
定義結構體陣列 定義結構體陣列和定義結構體相似,在變數名表列宣告它是陣列即可。例如sturct student sturct student stu 3 或者直接定義乙個結構體陣列 sturct student stu 3 sturct stu 3 結構體陣列的初始化一般形式是在定義陣列後面加上 結...
c 動態陣列構造及應用
檔名稱 arrayclass.h 功能 自定義陣列型別標頭檔案 用於動態陣列應用,char型別指標陣列 by adengou 2011.8.13 檔案頭 ifndef array class define array class include include ifndef null const i...