靜態陣列和動態陣列的區別

2021-07-29 18:20:04 字數 432 閱讀 3737



靜態陣列在記憶體中位於棧區,是在定義時就已經在棧上分配了固定大小,在執行時這個大小不能改變,如:int a[10];

在函式執行完以後,系統自動銷毀;

動態陣列是malloc或者new出來的,位於記憶體的堆區,它的大小是在執行時給定,並且可以改變其,如:

int *a;

a = new int[10];動態陣列,其建立麻煩,使用完必須由程式設計師自己通過free或者delete釋放,否則嚴重會引起記憶體洩露。new/delete

malloc/free  new/delete 區別

他們都是對堆區的操作,程式設計師申請記憶體,用完要記得釋放,否則會記憶體洩漏,多次申請釋放,會造成堆區碎片;

new/delete是操作符,malloc/free是標準庫函式,前者可以過載,可以有構造和析構函式,可以返回某種型別物件的指標,後者返回void指標。

靜態陣列和動態陣列的區別

靜態陣列在記憶體中位於棧區,是在定義時就已經在棧上分配了固定大小,在執行時這個大小不能改變,如 int a 10 在函式執行完以後,系統自動銷毀 動態陣列是malloc或者new出來的,位於記憶體的堆區,它的大小是在執行時給定,並且可以改變其,如 int a a new int 10 動態陣列,其建...

關於 靜態陣列和new分配的動態陣列的區別

1 對靜態陣列名進行sizeof運算時,結果是整個陣列占用空間的大小 因此可以用sizeof 陣列名 sizeof 陣列名 來獲取陣列的長度。int a 5 則sizeof a 20,sizeof a 4.因為整個陣列共佔20位元組,首個元素 int型 佔4位元組。int a newint 4 則s...

語言的動態陣列與靜態陣列

近來編寫幾個程式,很多都用到了陣列。但是對於陣列的大小卻是沒有固定的,也就是說可以更改陣列大小,其大小是可以變化的。並不像初學時的那樣,告訴你乙個範圍,你就必須取最大值以滿足要求。那樣可能就會浪費很多不必要的記憶體單元!那麼到底應該怎樣定義乙個動態陣列列?在陣列一章中,曾介紹過陣列的長度是預先定義好...