c 動態陣列的優點,建立和刪除

2021-09-18 04:01:18 字數 1169 閱讀 5739

動態陣列可以有兩種使用方式:

1:不能預先知道陣列的大小使用動態陣列

傳統陣列(靜態陣列)是需要在程式執行前,就指定大小,比如說

int i = 10;

int a[i];

這種就是不合法的。

因為函式棧的要求,就是在函式執行前,分配好所有變數的空間,i是不定的,所以不能再執行前,就分配好空間。

但是大多數情況,我們並不能預先知道陣列的大小的。

所以我們使用動態陣列

int *a = new int[i];

這個語句就可以在執行的時候,才分配空間,是合法的。

2:大陣列儲存時棧區是有大小限制

傳統陣列是存放在棧區的,棧區是有大小限制的,如果你申請了乙個大於2m的陣列,程式就會報錯……

但是動態陣列是在堆空間的,理論上,記憶體有多大,就可以申請多大的陣列。

在vc中棧預設是1m;有時建立乙個a[1000000000]甚至更長的陣列時棧會不夠用,與此同時,即使陣列不是太大,例如a[1000000],一次申請連續的陣列會造成資源的浪費,並且可能因為很多因素記憶體的分配不能進行,而得不到記憶體。所以動態陣列可以最大的限度節省記憶體空間。

一維動態陣列的建立和刪除

int *p = 0;

p = new int[10];//建立

delete p;

二維動態陣列的建立和刪除,以建立乙個二維矩陣為例

double **data =0;//定義乙個二維的指標

data = new double *[rsize]; //建立矩陣的行

for (int i = 0; i < rsize; i++)

for (int i = 0; i < rsize; i++)

for (int j = 0; j < csize; j++)

data[i][j] = 0; //初始化

/*****二維動態陣列刪除****/

for (int i = 0; i < y; ++i)

delete p;

p = null;

new出來的陣列它的邏輯位址(虛擬位址)是連續的,所以可以用遍歷來讀取,但實體地址是不一定的(因為要大陣列儲存,這個是作業系統的事情,使用者不用關心)。

C 動態建立和刪除二維陣列

1.a ga n new a m n delete ga 缺點 n必須是已知 優點 呼叫直觀,連續儲存,程式簡潔 經過測試,析構函式能正確呼叫 2.a ga new a m for int i 0 i m i ga i new a n for int i 0 i m i delete ga i de...

WPF 中動態建立和刪除控制項

動態建立控制項 1.容器控制項.registername name 要註冊的控制項 註冊控制項 2.容器控制項.findname name as 控制項型別 找到控制項並轉換成相應型別 注意 僅通過 控制項.name來設定是不能通過findname來找到控制項的,必須註冊 動態刪除控制項 1.容器控...

C 物件的動態建立和釋放

使用類名定義的物件 請檢視 c 類的宣告和物件的定義 都是靜態的,在程式執行過程中,物件所佔的空間是不能隨時釋放的。但有時人們希望在需要用到物件時才建立物件,在不需要用該物件時就撤銷它,釋放它所佔的記憶體空間以供別的資料使用。這樣可提高記憶體空間的利用率。在c 中,可以使用new運算子動態地分配記憶...