數組是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