天天看點

C++中關于使用[]定義的靜态數組和new配置設定的動态數組的差別

  • 靜态數組:
int a[20];
int b[] = {1, 2, 3}           

複制

  • 靜态數組的長度為常量,在棧中配置設定記憶體空間,會自動釋放。使用sizeof時,計算的是整個數組的位元組大小。
  • 動态數組:
int len = 20;
int *a = new int[len];
delete a;           

複制

動态數組在堆中配置設定記憶體,必須手動釋放。使用sizeof時,計算的是指針變量所占記憶體的位元組大小。

在使用時,如果數組大小已經确定,可以使用靜态數組,效率較高;如果數組大小需要在運作時确定(比如使用者輸入,函數參數傳遞等),則使用動态數組。

此外,如果需要在函數中傳回數組,則必須注意用靜态數組時,由于記憶體在棧中配置設定,函數執行完畢時會自動銷毀,是以傳回一個靜态數組變量是無意義的;使用動态數組就可以傳回,并在不需要時注意delete釋放堆中的記憶體。