C++學習篇之二(動態內存分配)

用new運算符實現動態內存分配

1.第一種用法:給一個變量分配內存空間**

P = new T;
T是任意數據類型的名字,P是類型爲T*的指針
動態分配出一片大小爲sizeof(T)字節的內存空間,並且將該內存空間起始地址賦值給P,例如:

int *pn;
pn = new int;	//分配一個int大小的內存,起始地址賦值給pn
*pn = 5;		//通過指針間接訪問上述內存地址並賦值

2.第二種用法:給一個數組分配內存空間

P = new T[N];
T:任意數據類型名
P:類型爲T*的指針
N:要分配的數組的元素個數,可以是整型表達式
動態分配出一片大小爲N * sizeof(T)字節的內存空間,並將該內存空間的起始地址賦值給P。例如:

int *pn;
int i = 5;
pn = new int[i*20]; //i* 20 = 100;所以數組下標爲0-99
pn[0] = 20;
pn[100] = 30;//編譯並沒有問題,訪問時數組越界 

new運算符的返回值類型

new T;
new T[n];
這兩個表達式的返回值的類型都是 T*
驗證:

int *p = new int;	//賦值運算符兩邊的數據類型必須相同,
					//所以側面驗證該返回值的數據類型是 T*

用delete運算符釋放動態分配的內存空間

用new分配的內存空間一定要用delete運算符進行釋放

delete 指針 ; //該指針必須指向new出來的空間

例如:(變量

int *p = new int;
*p = 5;
delete p;		//釋放內存空間
delete p;		//導致異常,一片空間不能被釋放兩次

例如:(數組

int *p = new int[20];
p[0] = 1;
delete []p;			//注意指針前要加[]

若動態分配的存儲空間沒有被回收就會變成內存垃圾,在之後的程序運行中,該片內存將不會被使用,就被浪費掉了
————參考北大c++網課

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