【C++基礎編程】#018 數組初始化:int a[10] 和 int *a = new int[10]區別

數組是C++中最常見的數據結構之一。

一般來說,有兩種方法初始化一個數組(假設數組長度爲10):

int a[10];
int *a = new int[10];

下面簡單介紹一下這兩種方法的區別:


區別一

  • 前者系統會在工作棧中分配空間,系統會自動實現內存的分配和回收。
  • 後者系統會在工作堆中分配空間,系統一般不會自動實現內存的回收,如果數組a使用完畢,需要delete[] a來刪除數組a佔的內存空間,否則可能會造成內存泄露。

區別二

  • 前者數組長度一般在編譯時就固定了,若int a[10],則數組長度固定爲10
  • 後者數組長度是動態分配的,就是說可以在運行的時候給出長度

舉例:
cin >>length;
int *a = new int[length];
每次運行都可以控制數組的長度,即所謂動態分配。

區別三

若要構建的數組特別大,比如a[1000000]則一般用第二種方式初始化數組。
因爲棧的實際內存是連續內存,因此可分配空間較小,堆可以是非連續內存,因此可以分配較大內存。

部分參考:
https://zhidao.baidu.com/question/312441671.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章