C++靜態數組和動態數組的區別



靜態數組的長度是固定的,不能根據應用程序的需要改變,而動態內存分配可滿足此需求。

比如,你寫一個數組用來存放一個班所有人的數學成績,如果你知道這個班一共有50個人,那好辦,直接

 
int grade[50];

這樣編譯器在編譯階段就知道該爲這個數組分配多少內存了,這就叫靜態分配。


那要是這個班的人數是未知的,需要用戶手動輸入來確定呢?

那就需要動態分配了:

void func(int student_count)

{

    int grade[] = new int[student_count];

} 

 在這裏由於student_count在編譯時是未知的,所以編譯階段編譯器無法知道需要爲該數組分配多少內存,只有在運行時用戶輸入數據的時候才能確定,所以這就需要運行時爲該數組動態分配內存。

靜態分配的內存在棧裏,每進入一個函數時都會建棧,棧裏會存放函數用到的參數、局部變量等信息,函數執行完以後,會出棧銷燬棧,這個過程就會釋放你靜態分配的數組內存,這是由系統自動完成的。
動態分配的內存,實際在堆上,系統沒法自動幫你去釋放堆上的內存,需要你自己寫free或者delete來告訴操作系統需要幫你去釋放堆上哪個位置的內存。

發佈了46 篇原創文章 · 獲贊 18 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章