new的用法
開辟單變量地址空間
使用new運算符時必須已知數據類型,new運算符會向系統堆區申請足夠的存儲空間,如果申請成功,就返回該內存塊的首地址,如果申請不成功,則返回零值。
new運算符返回的是一個指向所分配類型變量(對象)的指針。對所創建的變量或對象,都是通過該指針來間接操作的,而動態創建的對象本身沒有標識符名。
一般使用格式:
格式1:指針變量名=new類型標識符;
格式2:指針變量名=new類型標識符(初始值);
格式3:指針變量名=new類型標識符 [內存單元個數];
說明:格式1和格式2都是申請分配某一數據類型所占字節數的內存空間;但是格式2在內存分配成功后,同時將一初值存放到該內存單元中;而格式3可同時分配若干個內存單元,相當于形成一個動態數組。例如:
1)newint; //開辟一個存放整數的存儲空間,返回一個指向該存儲空間的地址。int*a=newint即為將一個int類型的地址賦值給整型指針a
2)int*a=newint(5)作用同上,但是同時將整數空間賦值為5
2.開辟數組空間
對于數組進行動態分配的格式為:
指針變量名=new類型名[下標表達式];
delete[]指向該數組的指針變量名;
兩式中的方括號是非常重要的,兩者必須配對使用,如果delete語句中少了方括號,因編譯器認為該指針是指向數組第一個元素的指針,會產生回收不徹底的問題(只回收了第一個元素所占空間),加了方括號后就轉化為指向數組的指針,回收整個數組。
delete[]的方括號中不需要填數組元素數,系統自知。即使寫了,編譯器也忽略。
請注意“下標表達式”不必是常量表達式,即它的值不必在編譯時確定,可以在運行時確定。
一維:int*a=newint[100]; //開辟一個大小為100的整型數組空間
二維:int**a=newint[5][6]
三維及其以上:依此類推.
一般用法:new類型(初值)