動態記憶體配置 - C/C++
文章推薦指數: 80 %
m = new int[1000]; //配置1000個整數的記憶空間給指標變數m,m即為一個陣列. 一旦不再需要這個動態配置的陣列,我們還可以把記憶體釋放出來,以便讓程式有更大的記憶 ...
計算機概論:C/C++程式設計
第5章、陣列和指標
授課教師:陳慶瀚
WWW
:http://www.miat.ee.isu.edu.tw/cpp
E-mail:[email protected]
5.6動態記憶體配置(Dynamical
MemoryAllocation)
想像一下,如果我們想寫一個計算25筆資料的平均值的程式,我們一定會宣告一個大小為25的陣列,如
float
data[25];
接著使用這個陣列來存放和處理資料。
#include
但如果下一次要計算的資料是26筆或100筆,我們就需要修改程式,將陣列大小改為26或100,再重新編譯、執行。
如此一來,這個程式就毫無彈性可言,因為任何想要使用這個程式的人都必須修改原始碼、重新編譯、才能正確執行它的需求。
比較彈性的處理方法是:程式撰寫的時候不設定陣列的大小,而在執行時才以動態的方式指定、配置和使用這個陣列,例如讓使用者由鍵盤輸入它所需要的陣列大小,這時才決定配置所需的記憶體。
如此則每次處理不同的資料就不需重新編譯了。
這種做法稱為動態記憶體配置(DynamicalMemoryAllocation),我們先宣告一個指標變數,再藉由C++所提供的動態記憶體配置運算子new來執行動態記憶體配置,
指標變數=new指標的變數型別[記憶體大小];
例如
int*m; //宣告一個指標變數m
m=new
int[1000];//配置1000個整數的記憶空間給指標變數m,m即為一個陣列
一旦不再需要這個動態配置的陣列,我們還可以把記憶體釋放出來,以便讓程式有更大的記憶空間做其他用途。
釋放記憶體的方法是使用C++所提供的釋放記憶體運算子,語法很簡單:
delete指標變數;
例如
deletem;
就會把前面m所配置的記憶體釋放出來。
m又回復成為原先的指標變數,因此還可以再度配置不同的記憶空間給m,以便因應不同陣列大小的需求。
在程式執行過程中,一個指標可以被反覆的配置、釋放動態記憶體任意次。
/*----------------------------------------------------*/
// 範例程式5-11
// 動態記憶體配置
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include
提示:
cin>>N;
int
*data;
data=new
int[N];
cout<>data[i];
}
計算機概論:C/C++程式設計
義守大學電機系陳慶瀚
2001.11.12
延伸文章資訊
- 1C++ 指標陣列和指向陣列的指標 - 程式人生
指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標. 陣列指標:a pointer to an array,即指向陣列的指標. 還要注意的是他們用法的區別...
- 2C++教學(二十一):指標陣列 - 痞客邦
C++教學(二十一):指標陣列指標即然也是變數的一種,有時為了集合資料與處理上的方便,我們也可以使用陣列的方式來管理指標變數,宣告指標陣列的方式與 ...
- 3第5章、陣列和指標 - C/C++
但是有三種應用場合,使用指標仍然是必要的。第一是字串(string)的宣告;第二是動態記憶體配置(dynamic memory allocation);第三是函式的陣列傳遞。 指標變數(Poin...
- 4(C) 簡單搞懂指標(pointer)、指標陣列(pointers of array, int *foo ...
指標(pointer)就是一個變數的記憶體的地址,在宣告的時候使用"*"放在變數型態之後。他可以被視為一種資料型別的修飾,因此若宣告了一個指標變數時,就代表 ...
- 5C++ 中指向陣列的指標| D棧 - Delft Stack
即使C++ 試圖用引用替換其某些用例,但指標仍然只是內建資料型別,可用於直接處理記憶體。請注意,C 風格的陣列本質上是指向起始元素的指標,並且由於 ...