計算機概論: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筆,我們就需要修改程式,將陣列大小改為26100,再重新編譯、執行。如此一來,這個程式就毫無彈性可言,因為任何想要使用這個程式的人都必須修改原始碼、重新編譯、才能正確執行它的需求。

比較彈性的處理方法是:程式撰寫的時候不設定陣列的大小,而在執行時才以動態的方式指定、配置和使用這個陣列,例如讓使用者由鍵盤輸入它所需要的陣列大小,這時才決定配置所需的記憶體。如此則每次處理不同的資料就不需重新編譯了。

這種做法稱為動態記憶體配置(Dynamical Memory Allocation),我們先宣告一個指標變數,再藉由C++所提供的動態記憶體配置運算子new來執行動態記憶體配置,

指標變數 = new 指標的變數型別[記憶體大小];

例如

int *m;              //宣告一個指標變數m

m = new int[1000]; //配置1000個整數的記憶空間給指標變數mm即為一個陣列

一旦不再需要這個動態配置的陣列,我們還可以把記憶體釋放出來,以便讓程式有更大的記憶空間做其他用途。釋放記憶體的方法是使用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
寫一個程式,讓使用者輸入他的英文名字(4個字元),再將名字顛倒其字元輸出,例如使用者輸入chen,則螢幕輸出nehc

提示:

   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++程式設計

義守大學電機系 陳慶瀚 
2001.11.12

 

謝孟媛 dvd -
情趣用品 -
飛鳥遊戲 -
遊戲基地 -
PATEK PHILIPPE -
xyz資訊工作坊 -
xyz軟體王 -
英文老師 -
沛納海 -
xyz軟體下載倉庫 -
基測試題 -
CARTIER 卡地亞 -
林晟數學 -
PIAGET -
費洛蒙情定 -
xyz -
軟體大補帖 -
高國華補習班 -
game淘 -
ps2台片 -
wii超級瑪莉攻略 -
情定費洛蒙 -
wii價格2011 -
xbox 360台片 -
tvgame360 -
愛馬仕 -
春藥專賣店 -
ps3價錢 2011 -
ps2遊戲王 -
wii遊戲片專賣店 -
百達翡麗 PATEK PHILIPPE -
壯陽藥品哪買 -
海賊王 -
春藥王 -
xyz軟體下載倉庫 -
壯陽食物 -
xbox360 -
催情藥 -
TISSOT 天梭 -
ps2遊戲燒錄 -
威而剛哪裡買 -
一夜情婦 -
xbox 360台片專賣 -
國中基測題庫 -
無雙遊戲網 -
xyz軟體王 -
ps2遊戲片80元 -
基測 -
xyz軟體王下載 -
GUCCI 古馳 -
南一題庫網 -
COACH -
LOUIS VUITTON -
wii超級瑪莉 -
wii價格2011 -
魔法老師 -
催情藥專賣店 -
國小翰林題庫網 -
wii遊戲片專賣店 -
遊戲天堂 -
寶格麗 -
金榜之路 -
wii遊戲片80元 -
xbox 360遊戲片 -
wii遊戲載點 -
人類費洛蒙情定 -
xbox 360台片專賣 -
催情王 -
xyz軟體之家 -
ps2遊戲片80元 -
情色小站 -
微風廣場 -
情慾之夜 -
民視文化 -
xbox360 -
蔻馳 -
ps2遊戲燒錄 -
ps3遊戲片 -
龍騰高中題庫 -
ps3台片 -
威而剛 -
ps3價錢 2011 -
軟體王下載 -
蕭邦 CHOPARD -
龍騰 -
催情藥 -
威而剛哪裡買 -
基測題目 -
HERMES 愛馬仕 -
情定費洛蒙 -
ps2台片 -
ps3遊戲片 -
wii瑪莉兄弟遊戲 -
江詩丹頓 Vacheron Constantin -
wii超級瑪莉 -
wii遊戲片在ho99小舖 -
春藥王 -
歷屆基測試題 -
窮人軟體 -
威而柔哪裡買 -
蕭邦 -
翰林題庫網 -
一夜情婦 -
wii遊戲下載 -
xbox 360遊戲 -
壯陽食物 -
ps2遊戲片 -
sogo百貨 -
台灣情色網 -
xyz軟體王下載 -
lv2011官方網 -
wii遊戲片專賣店 -
xbox 360價錢 -
歐米茄 -
雷達錶 RADO -
xyz資訊工坊 -
儒林補習班 -
壯陽藥品 -
xyz軟體王 -
窮人遊戲 -
ps2遊戲下載 -
ps3台片 -
德周 -
sogo百貨 -
費洛蒙情定 -
壯陽藥品哪買 -
催情王 -
春藥哪裡買 -
lv2011夏季新款 -
情趣用品 -
中友百貨 -
史萊姆的第一個家 -
情色論壇 -
萬寶龍 MONT BLANC -
萬國 -
ps2遊戲下載 -
春藥哪裡買 -
xyz資訊工作坊 -
龍騰文化 -
太平洋百貨 -
軟體王 -
xbox 360台片專賣 -
ps3遊戲片在ho99小舖 -
壯陽藥 -
xyz軟體銀行 -
xbox360台片 -
魔法24 -
wii遊戲片80元 -
XYZ資訊工坊 -
CARTIER -
春藥網 -
壯陽 -
xyz 軟體補給站 -
微風廣場 -
lv2011新款型錄 -
xbox 360遊戲 -
費洛蒙 -
卡地亞 -
wii遊戲下載 -
窮人天碟 -
春藥專賣店 -
gucci2011專賣店旗艦店 -
迪奧 -
CHANEL -
xyz軟體大本營 -
xbox 360遊戲片在ho99小舖 -
台北郵購網 -
BURBERRY 巴寶莉 -
伯爵 -
遠東百貨 -
陳希 -
費洛蒙mx -
時間廣場 -
漢神百貨 -
情色論壇 -
傳政 -
軟體 -
寶格麗 BVLGARI -
名牌包俱樂部 -
時間廣場 -
威而柔 -
wii瑪莉兄弟遊戲 -
lv名牌包專賣店 -
xyz軟體大本營 -
威而柔哪裡買 -
伯爵 PIAGET -
xyz軟體銀行 -
ps3遊戲下載 -
wii超級瑪莉歐 -
無名套裝 -
xyz軟體下載倉庫 -
江詩丹頓 -
林晟 -
ps3遊戲片在ho99小舖 -
威而剛 -
費洛蒙mx -
xyz軟體之家 -
HERMES -
林晟超理解數學 -
謝孟媛 -