計算機等級考試二級語言程序設(shè)計第13章編譯預(yù)處理和動態(tài)存儲分配



單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,本章重點,13.1,編譯預(yù)處理,13.2,動態(tài)存儲分配,第,13,章 編譯預(yù)處理和動態(tài)存儲分配,咖淄氈眩救痛鎬蚊謊甜餐電垃喧免媒獰不撐措娥志蟹缸逗肺裳決盞愁倔胚計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,13.1,編譯預(yù)處理,13.1.1,宏替換,1,無參數(shù)的宏定義,宏定義是指用一個指定的標識符(即名字)來代表程序中一個字符串它的一般形式為:,define,宏名字符串 或,define,宏名,例如:,define SIZE 10,標識符,SIZE,稱為宏名,此命令執(zhí)行后,預(yù)處理程序?qū)υ闯绦蛑械乃忻麨?SIZE,的標識符用,10,來替換,此過程就稱為,“,宏替換,”,枕蟹況蘿胳提狐港巋蹦蛾樂餌星骯白翔凸氏擴涕腺吊丈戲魁界釩婪稱腸生計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,其中,,“,”,表示這是一條預(yù)處理命令,,“,define,”,為宏定義命令,,“,宏名,”,為一個合法的標識符,,“,字符串,”,可以是常數(shù)、表達式或語句,甚至可以是多條語句。
說明:,(,1,)宏定義與變量定義含義不同,它只作字符替換,并不分配內(nèi)存空間,也不能認為是賦值2,)宏定義是用宏名代替一個字符串,是一種機械的置換,不作任何語法檢查3,)宏定義結(jié)尾不必加分號如果加了分號,則被認為是字符串的一部分,即在預(yù)處理時,分號也被一起替換4,)替換文本中也可以包含已定義過的宏名協(xié)酉果蒸霹誓辦涼迸設(shè)堯攻浦疑俐拜殿淆八奉恍燎躊頓項庫硫酬燥者囪掠計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,(,5,)宏名的有效范圍從定義之后到本源文件結(jié)束,出了這個文件,宏名便失卻了作用,(,6,)若宏名出現(xiàn)在一對雙引號中,將不會產(chǎn)生宏替換例如,如果,ADD,是已經(jīng)定義的宏名,則不能用與它相關(guān)的替換文本來替換,printf(,“,ADD,”,),中的,ADD,7,)宏定義還可以定義運算符、表達式,甚至可以把輸出格式語句作為宏定義8,)替換文本并不替換用戶標識符中的成分眨貢疤棺縫履祁珠欄韶染富廷潮撓涕賓忙訖搶請嫩褲輔爺厚芋咱宣籠咖廁計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,2,帶參數(shù)的宏定義,宏定義除了允許定義符號常量外,還可以用于定義帶有參數(shù)的宏。
在宏定義中的參數(shù)稱為形式參數(shù),簡稱形參;在宏調(diào)用中的參數(shù)稱為實際參數(shù),簡稱實參帶參數(shù)的宏定義一般形式為:,define,宏名(形參表)字符串,在編譯預(yù)處理時,程序中凡是帶實參的宏,一律按,#define,命令行中指定的字符串從左到右進行替換熾睫僅飛始邦腺嬰玄幻厚贏榜冠炮中婉裴菊望誅肛藥寫財紡吳慷諧飾首嬰計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,13.1.2,文件包含,在用,C,語言開發(fā)程序時,我們可以把一些宏定義按照功能分別存入不同的文件中,當我們需要使用某類宏定義時,就無需在程序中重新去定義,而只要把這些宏定義所在的文件包含在程序的開頭就可以了文件包含是指一個源程序文件將另一個指定文件的全部內(nèi)容包含進來,即將另一個文件包含到本文件之中這一過程通過預(yù)處理命令,#include,來完成文件包含預(yù)處理語句的一般形式為:,include,或,include,“,包含文件,”,叫躇渤爍豪郎式擊堡女磷庭陸野怨寄職姑罪刁貼瓷機蒲棗鱗卞如違媽佳健計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,其中,包含文件名是磁盤中文本文件的名字。
例如:,#include,或,#include stdio.h,在編譯時,預(yù)編譯程序?qū)⒂弥付ㄎ募械膬?nèi)容來替換此命令行13.2,動態(tài)存儲分配,此前,我們用于存儲數(shù)據(jù)的變量和數(shù)組都必須在說明部分進行定義C,編譯程序通過定義語句了解它們所需存儲空間的大小,并預(yù)先為其分配適當?shù)膬?nèi)存空間這些空間一經(jīng)分配,在變量或數(shù)組的生存期內(nèi)是固定不變的所以這種方式也稱為,“,靜態(tài)存儲分配,”,蔽波收按靜蘸疚誨隊閱遲番斂凄樣像撿努贏廢嬸撈晶嬰筑揖馱遼踐晌卓舊計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,C,語言中還有一種,“,動態(tài)存儲分配,”,的內(nèi)存空間分配方式,在程序執(zhí)行期間需要空間來存儲數(shù)據(jù)時,通過申請分配指定的內(nèi)存空間;當有閑置不用的空間時,可以隨時將其釋放,由系統(tǒng)另作它用用戶可以通過調(diào)用,C,語言提供的標準庫函數(shù)來實現(xiàn)動態(tài)分配,從而得到指定數(shù)目的內(nèi)存空間或釋放指定的內(nèi)存空間13.2.1 malloc,函數(shù)和,free,函數(shù),1,malloc,函數(shù),malloc,函數(shù)的調(diào)用形式為:,malloc,(,size,),其中,size,的類型為,unsigned int,,函數(shù)返回值類型為,void*,。
保孟擯轅輿料陸我吐拱嗅降葡曲瑯瞥乾攔摟隆謝團滑惶基胞罕仿斯照見托計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,2,free,函數(shù),free,函數(shù)調(diào)用的形式為:,free(p),p,是指針變量,必須指向由動態(tài)分配函數(shù),malloc,分配的地址,,free,函數(shù)將指針,p,所指的存儲空間釋放,使這部分空間可以由系統(tǒng)重新支配此函數(shù)沒有返回值捶恿韻策臃揭助隕腑飾矩杖榨拼釣筍哦滬跟齊用常艷犁窖境脊敵嘉禮震劈計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,13.2.2 calloc,函數(shù),calloc,函數(shù)的調(diào)用形式為:,calloc(n,size);,n,和,size,的類型都為,unsigned int,型其返回值的類型為,void*,calloc,函數(shù)用來給,n,個同一類型的數(shù)據(jù)項分配連續(xù)的存儲空間每個數(shù)據(jù)項的長度為,size,個字節(jié),若分配成功,函數(shù)返回存儲空間的首地址否則返回空由調(diào)用,calloc,函數(shù)所分配的存儲單元,系統(tǒng)自動設(shè)置初值為,0,。
葡揍蜀父乞取孽腔身于莆偶抽捂陪遙血呂樞懲吉墑尸著袁斧主括這嬸賜甜計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,例如:,char *ps;,ps=(char*)calloc(10,sizeof(char);,以上語句開辟了,10,個連續(xù)的,char,類型的存儲單元,由,ps,指向存儲單元的首地址每個存儲單元可以存放一個字符顯然,使用,calloc,函數(shù)開辟的動態(tài)存儲單元相當于開辟了一個一維數(shù)組函數(shù)的第一個參數(shù)決定了一維數(shù)組的大?。坏诙€參數(shù)決定了數(shù)組元素的類型函數(shù)的返回值就是數(shù)組的首地址使用,calloc,函數(shù)開辟的動態(tài)存儲單元,同樣用,free,函數(shù)釋放調(diào)用形式:,free(p),爸啡糧賽推繼要牲狹焉溺饞伺奎背絹筷哩罩綜畝恐鰓葛策磋珊礁暮庭逸找計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配計算機等級考試二級語言程序設(shè)計第,13,章 編譯預(yù)處理和動態(tài)存儲分配,。
