使用常規陣列儲存資料時,一般都是在程式編譯時就已經為陣列分配好了記憶體。如果儲存的資料未達到陣列的長度,就會導致很多記憶體閒置,致使效率較低。
對於處理一些大型資料,我們就可以使用 new 進行動態記憶體分配。常規通過宣告來建立陣列,則在程式被編譯時就已經為它分配好了記憶體空間,不管程式最終是否使用陣列,陣列都在那裡,它占用了記憶體。但使用 new 時,可以在執行階段判斷是否使用陣列以及使用陣列需要的長度。這種在執行時為陣列分配記憶體方式稱為動態聯編。而這種在程式執行時建立的陣列被稱為動態陣列。
一、使用 new 建立動態陣列
只需將陣列的元素型別和元素的數目資訊告訴 new 即可。
語法規則:
pointertype * pointername = new arraytype [asize];
注釋: pointertype 指標型別;pointername 指標名; arraytype 陣列元素型別; asize 陣列元素的數目(既可以是變數也可以是常量)
例如:建立乙個包含10個int元素的動態陣列: int * psome = new int [10];
說明:new 運算子返回的是第乙個元素的位址。在該例子中,這個位址被賦值給 psome。
二、使用 delete 釋放動態陣列記憶體
當程式使用完 new 建立的記憶體後需要使用 delete 對記憶體進行釋放。
語法規則:
delete pointername;
說明: [ ] 方括號不能省略,它表明釋放的是整個陣列。
三、使用 new 和 delete 時,應遵循的規則:
①不要使用delete來釋放不是new分配的記憶體。
②不要使用delete釋放同乙個記憶體兩次甚至多次。
③如果使用new[ ]為陣列分配記憶體,則應該使用delete[ ]來釋放。
④如果new為乙個實體分配記憶體,則應使用delete(沒有方括號)來釋放。
⑤對空指標應用delete是安全的。
四、為陣列分配記憶體的通用格式:
type_name * pointer_name = new type_name [num_elements];
五、使用動態陣列
因為c++內部是使用指標來處理陣列的。因此陣列和指標基本上是等價的。就可以把指標當作陣列名使用。例如,對於第乙個元素就是 psome[0];對於第二個元素就是psome[1],以此類推。
程式清單 4.18 arraynew.cpp
//// main.cpp
// first
//// created by 劉偉 on 15/5/30.
//c++ primer plus
//程式清單4.18 arraynew.cpp
-- using the new operator for arrays
#include
using
namespace
std;
int main()
程式輸出示例:
regard p3 as a array, we can use a value of array:
p3[1] is 0.5
regard p3 as a array, we can use total:
p3[0]+p3[1]+p3[2]=1.5
actually,p3 is a pointer!
increment the pointer.
p3[0] is 0.5
p3[1] is 0.8
point back to beginning.
free the memory!
program ended with exit code: 0
使用new來建立動態陣列
使用new來建立動態陣列 1 如果程式只需要乙個值,則可能會宣告乙個簡單變數,因為對於管理乙個小型資料物件來說,這樣做比使用new和指標更簡單,儘管給人留下的印象不那麼深刻。通常,對於大型資料 如陣列 字串和結構 應使用new,這正是new的用武之地。例如,假設要編寫乙個程式,它是否需要陣列取決於執...
C 學習筆記 使用New來建立動態陣列
1 如何使用c 的new運算子建立陣列 建立乙個包含10個int元素的陣列 int psome new int 10 程式使用完new分配的記憶體塊時,應該用delete釋放 delete psome 使用new和delete時,應遵守以下規則 1 不要使用delete來釋放不是new分配的記憶體 ...
new動態建立陣列?(new建立多維陣列)
在使用陣列時我們難免會感覺陣列的靈活性太低,所以new成了我們使用頻率很高的乙個操作符。int p 2 int p2 2 2 int p3 2 2 2 這是最常規的操作。接下來上new的用法 new的第一種用法 int p newint 5 int p2 4 newint 5 4 int p3 4 ...