計算機概論:C/C++程式設計
|
第5章、陣列和指標 |
|
|
授課教師:陳慶瀚 WWW : http://www.miat.ee.isu.edu.tw/cpp E-mail : pierre@isu.edu.tw |
|
5.6 動態記憶體配置(Dynamical
Memory Allocation) 想像一下,如果我們想寫一個計算25筆資料的平均值的程式,我們一定會宣告一個大小為25的陣列,如 float
data[25]; 接著使用這個陣列來存放和處理資料。但如果下一次要計算的資料是26筆或100筆,我們就需要修改程式,將陣列大小改為26或100,再重新編譯、執行。如此一來,這個程式就毫無彈性可言,因為任何想要使用這個程式的人都必須修改原始碼、重新編譯、才能正確執行它的需求。 比較彈性的處理方法是:程式撰寫的時候不設定陣列的大小,而在執行時才以動態的方式指定、配置和使用這個陣列,例如讓使用者由鍵盤輸入它所需要的陣列大小,這時才決定配置所需的記憶體。如此則每次處理不同的資料就不需重新編譯了。 這種做法稱為動態記憶體配置(Dynamical Memory Allocation),我們先宣告一個指標變數,再藉由C++所提供的動態記憶體配置運算子new來執行動態記憶體配置, 指標變數 = new 指標的變數型別[記憶體大小]; 例如 int *m; //宣告一個指標變數m m = new
int[1000]; //配置1000個整數的記憶空間給指標變數m,m即為一個陣列 一旦不再需要這個動態配置的陣列,我們還可以把記憶體釋放出來,以便讓程式有更大的記憶空間做其他用途。釋放記憶體的方法是使用C++所提供的釋放記憶體運算子,語法很簡單: delete 指標變數; 例如 delete m; 就會把前面m所配置的記憶體釋放出來。m又回復成為原先的指標變數,因此還可以再度配置不同的記憶空間給m,以便因應不同陣列大小的需求。在程式執行過程中,一個指標可以被反覆的配置、釋放動態記憶體任意次。 /*----------------------------------------------------*/ // 範例程式5-11 // 動態記憶體配置 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include
<iostream.h> void
main(void) { int
*p; //宣告一個整數的指標p p
= new int[3]; // 配置記憶體給p,使p成為一個整數陣列 if(p==0)
//配置記憶體失敗 { return; } p[0]
= 20; p[1]
= 30; p[2]
= 40; int
i; for(i=0;i<3;i++)cout
<< p[i]<<endl; delete
p; // 釋放記憶體 } /*----------------------------------------------------*/ // 範例程式5-12 // 動態記憶體配置範例 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include
<iostream.h> #include
<stdlib.h> void
main(void) { int *m; //宣告一個整數的指標m int i,j,num; for(i=0;i<25;i++) { num=random(80); //亂數產生陣列大小num m = new int[num]; // 配置記憶體給m for(j=0;j<num;j++) { m[j]=random(10); //將陣列m任意填入[0,9]的亂數 cout<<m[j]; //輸出 } cout<<endl; //換行 } } 你應該會得到一個類似的毫無規律的輸出結果 464236461140239386511273289952117774098579545174221885947865971068655 3006406407449050409211370970430550 261133733608707927065667 86492958426295738403496763681449974797348253646299 36186878998668803968655249556712941529 76287512273510487853220296078365357744708580759484779710718960 2891791 378204113036 16411352963849974613686115032040006912575744214443110472384024 0016871678490882692259262020591268484875 734914362919802 696632368288375729175499 432319151808252865236770891810058191 4487683460942626141412739964110 780791631320016478891764 212476750200368683095736775903926989328446128873712441 8095388046205212105686766032486106543322512 3630471969112002215950425622801165 618813096121103917655616814680687706881082945748280 2058665069754889650935566878602041989205651241520141788328697463324496 386533811126421920628407479560721689803650790193149568993482 5069972041617 6099374420915520199557132688426785442397641301368806 602814460689350603100548744391489377307218431908995512617523989
課堂練習TD5-9: 提示: char
name[4]; cout<<"Enter
your name in 4 character : "; cin>>name; 課堂練習TD5-10: 寫一個程式,讓使用者輸入一個整數N後,動態配置大小為N的整數陣列data,再由使用者輸入N個陣列值,求其平均值輸出。 提示: cin>>N; int
*data; data=new
int[N]; cout<<"Enter
"<<N<<" values : "; for(i=0;i<N;i++) { cin>>data[i]; } |
||
計算機概論:C/C++程式設計 義守大學電機系 陳慶瀚 |