《動態(tài)內(nèi)存分配》PPT課件.ppt_第1頁
《動態(tài)內(nèi)存分配》PPT課件.ppt_第2頁
《動態(tài)內(nèi)存分配》PPT課件.ppt_第3頁
《動態(tài)內(nèi)存分配》PPT課件.ppt_第4頁
《動態(tài)內(nèi)存分配》PPT課件.ppt_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

靜態(tài)內(nèi)存分配和動態(tài)內(nèi)存分配,1、靜態(tài)內(nèi)存分配,當程序中定義變量或數(shù)組以后,系統(tǒng)就會給變量或數(shù)組按照其數(shù)據(jù)類型及大小來分配相應的內(nèi)存單元,這種內(nèi)存分配方式稱為靜態(tài)內(nèi)存分配 。,int k; /系統(tǒng)將給變量k分配2個字節(jié)(VC下分配4個字節(jié))的內(nèi)存單元 char ch10; /系統(tǒng)將給這個數(shù)組ch分配10個字節(jié)的內(nèi)存塊,首地址就是ch的值,靜態(tài)內(nèi)存分配一般是在已知道數(shù)據(jù)量大小的情況下使用,例如,要對10個學生的成績按降序輸出,則可定義一個數(shù)組:int score10; 用于存放10個學生的成績,然后再進行排序。,如果事先并不知道學生的具體人數(shù),編寫程序時,人數(shù)由用戶輸入,然后再輸入學生的成績。那有如何如何處理呢?,int n; int scoren; scanf (“%d“, ,如何解決?,動態(tài)內(nèi)存分配,2、動態(tài)內(nèi)存分配,所謂動態(tài)內(nèi)存分配是指在程序運行過程中,根據(jù)程序的實際需要來分配一塊大小合適的連續(xù)的內(nèi)存單元。 程序可以動態(tài)分配一個數(shù)組,也可以動態(tài)分配其它類型的數(shù)據(jù)單元。動態(tài)分配的內(nèi)存需要有一個指針變量記錄內(nèi)存的起始地址。 C語言中動態(tài)內(nèi)存分配其實就是使用一個標準的庫函數(shù)malloc,其函數(shù)的原型為:,void *malloc( unsigned int size );,說明: size這個參數(shù)的含義是分配的內(nèi)存的大?。ㄒ宰止?jié)為單位)。 返回值:失敗,則返回值是NULL(空指針)。 成功,則返回值是一個指向空類型(void)的指針 (即所分配內(nèi)存塊的首地址)。,sizeof運算符,sizeof運算符 功能:獲取變量和數(shù)據(jù)類型所占內(nèi)存大?。ㄗ止?jié)數(shù)) 格式:,sizeof 表達式 sizeof(數(shù)據(jù)類型名或表達式),例: sizeof (int) 其值為2(在TC2.0或BC3.1下) 其值為4(在VC6.0下) sizeof (long) 其值是4 sizeof (10L ) 其值也是4 unsigned long a = 2; sizeof (a) 其值也是4,2、動態(tài)內(nèi)存分配,int n, *pscore; scanf (“%d“, /可對pscore所指向的單元進行其它處理,例如:根據(jù)學生人數(shù)來建立數(shù)組的問題可以用動態(tài)內(nèi)存分配來解決,其方法如下:,pscore 0100,共n*sizeof(int)個 字節(jié)內(nèi)存單元,關于malloc的使用有幾點需強調(diào)一下: malloc前面必須要加上一個指針類型轉(zhuǎn)換符,如前面的(int *)。因為malloc的返回值是空類型的指針,一般應與右邊的指針變量類型一致。 malloc所帶的一個參數(shù)是指需分配的內(nèi)存單元字節(jié)數(shù),盡管可以直接用數(shù)字來表示,但一般寫成如下形式: 分配數(shù)量*sizeof(內(nèi)存單元類型符) malloc可能返回NULL,表示分配內(nèi)存失敗,因此一定要檢查分配的內(nèi)存指針是否為空,如果是空指針,則不能引用這個指針,否則會造成系統(tǒng)崩潰。所以在動態(tài)內(nèi)存分配的語句的后面一般緊跟一條if語句以判斷分配是否成功。,3、動態(tài)內(nèi)存釋放,計算機中最寶貴的資源就是內(nèi)存。因此需要動態(tài)分配內(nèi)存的程序一定要堅持“好借好還,再借不難”的原則。 釋放動態(tài)內(nèi)存的函數(shù)free其原型為:,void free (void *block);,例: free( pscore );,注意: 調(diào)用malloc和free函數(shù)的源程序中要包含stdlib.h或malloc.h或alloc.h(在TC、BC下)。malloc和free一般成對出現(xiàn)!,【例】 編寫程序先輸入學生人數(shù),然后輸入學生成績,最后輸出學生的平均成績、最高成績和最低成績。,#include #include #include void main ( ) int num, i; int maxscore, minscore, sumscore; int *pscore; float averscore; printf (“input the number of student: “); scanf (“%d“, ,printf (“input the scores of students now:n“); for (i = 0; i maxscore) maxscore = pscorei; if (pscorei minscore) minscore = pscorei; sumscore = sumscore + pscorei; averscore = (float)sumscore / num;,printf (“-n“); printf (“the average score of the students is %.1fn“, averscore); printf (“the highest score of the students is %dn“, maxscore); printf (“the lowest score of the students is %dn“, minscore); free (pscore); /釋放動態(tài)分配的內(nèi)存 ,運行結(jié)果: input the number of student:4 input the scores of students now: 45 76 88 94 - the av

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論