計(jì)算機(jī)二級(jí)C語言_第13章_編譯預(yù)處理和動(dòng)態(tài)存儲(chǔ)分配_第1頁(yè)
計(jì)算機(jī)二級(jí)C語言_第13章_編譯預(yù)處理和動(dòng)態(tài)存儲(chǔ)分配_第2頁(yè)
計(jì)算機(jī)二級(jí)C語言_第13章_編譯預(yù)處理和動(dòng)態(tài)存儲(chǔ)分配_第3頁(yè)
計(jì)算機(jī)二級(jí)C語言_第13章_編譯預(yù)處理和動(dòng)態(tài)存儲(chǔ)分配_第4頁(yè)
計(jì)算機(jī)二級(jí)C語言_第13章_編譯預(yù)處理和動(dòng)態(tài)存儲(chǔ)分配_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、本章重點(diǎn)13.1 編譯預(yù)處理 13.2 動(dòng)態(tài)存儲(chǔ)分配 第第13章章 編譯預(yù)處理和動(dòng)態(tài)存儲(chǔ)分配編譯預(yù)處理和動(dòng)態(tài)存儲(chǔ)分配 13.1 編譯預(yù)處理13.1.1 宏替換1無參數(shù)的宏定義宏定義是指用一個(gè)指定的標(biāo)識(shí)符(即名字)來代表程序中一個(gè)字符串。它的一般形式為: define宏名字符串 或 define 宏名 例如: define SIZE 10標(biāo)識(shí)符SIZE稱為宏名,此命令執(zhí)行后,預(yù)處理程序?qū)υ闯绦蛑械乃忻麨镾IZE的標(biāo)識(shí)符用10來替換,此過程就稱為“宏替換”。 其中,“”表示這是一條預(yù)處理命令,“define”為宏定義命令,“宏名”為一個(gè)合法的標(biāo)識(shí)符,“字符串”可以是常數(shù)、表達(dá)式或語句,甚至可以是

2、多條語句。說明:(1)宏定義與變量定義含義不同,它只作字符替換,并不分配內(nèi)存空間,也不能認(rèn)為是賦值。(2)宏定義是用宏名代替一個(gè)字符串,是一種機(jī)械的置換,不作任何語法檢查。(3)宏定義結(jié)尾不必加分號(hào)。如果加了分號(hào),則被認(rèn)為是字符串的一部分,即在預(yù)處理時(shí),分號(hào)也被一起替換。(4)替換文本中也可以包含已定義過的宏名。 ( 5)宏名的有效范圍從定義之后到本源文件結(jié)束,出了這個(gè)文件,宏名便失卻了作用(6)若宏名出現(xiàn)在一對(duì)雙引號(hào)中,將不會(huì)產(chǎn)生宏替換。例如,如果ADD是已經(jīng)定義的宏名,則不能用與它相關(guān)的替換文本來替換printf(“ADD”)中的ADD。(7)宏定義還可以定義運(yùn)算符、表達(dá)式,甚至可以把輸出

3、格式語句作為宏定義。(8)替換文本并不替換用戶標(biāo)識(shí)符中的成分。 2帶參數(shù)的宏定義宏定義除了允許定義符號(hào)常量外,還可以用于定義帶有參數(shù)的宏。在宏定義中的參數(shù)稱為形式參數(shù),簡(jiǎn)稱形參;在宏調(diào)用中的參數(shù)稱為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參。帶參數(shù)的宏定義一般形式為:define宏名(形參表)字符串 在編譯預(yù)處理時(shí),程序中凡是帶實(shí)參的宏,一律按#define命令行中指定的字符串從左到右進(jìn)行替換。 13.1.2 文件包含在用C語言開發(fā)程序時(shí),我們可以把一些宏定義按照功能分別存入不同的文件中,當(dāng)我們需要使用某類宏定義時(shí),就無需在程序中重新去定義,而只要把這些宏定義所在的文件包含在程序的開頭就可以了。文件包含是指一個(gè)源程序

4、文件將另一個(gè)指定文件的全部?jī)?nèi)容包含進(jìn)來,即將另一個(gè)文件包含到本文件之中。這一過程通過預(yù)處理命令#include來完成。文件包含預(yù)處理語句的一般形式為:include 或 include“包含文件”其中,包含文件名是磁盤中文本文件的名字。例如:#include 或 #include stdio.h在編譯時(shí),預(yù)編譯程序?qū)⒂弥付ㄎ募械膬?nèi)容來替換此命令行。 13.2 動(dòng)態(tài)存儲(chǔ)分配此前,我們用于存儲(chǔ)數(shù)據(jù)的變量和數(shù)組都必須在說明部分進(jìn)行定義。C編譯程序通過定義語句了解它們所需存儲(chǔ)空間的大小,并預(yù)先為其分配適當(dāng)?shù)膬?nèi)存空間。這些空間一經(jīng)分配,在變量或數(shù)組的生存期內(nèi)是固定不變的。所以這種方式也稱為“靜態(tài)存儲(chǔ)分

5、配”。C語言中還有一種“動(dòng)態(tài)存儲(chǔ)分配”的內(nèi)存空間分配方式,在程序執(zhí)行期間需要空間來存儲(chǔ)數(shù)據(jù)時(shí),通過申請(qǐng)分配指定的內(nèi)存空間;當(dāng)有閑置不用的空間時(shí),可以隨時(shí)將其釋放,由系統(tǒng)另作它用。用戶可以通過調(diào)用C語言提供的標(biāo)準(zhǔn)庫(kù)函數(shù)來實(shí)現(xiàn)動(dòng)態(tài)分配,從而得到指定數(shù)目的內(nèi)存空間或釋放指定的內(nèi)存空間。13.2.1 malloc函數(shù)和free函數(shù) #include1malloc函數(shù)malloc函數(shù)的調(diào)用形式為:malloc(size)其中size的類型為unsigned int,函數(shù)返回值類型為void*。2free函數(shù)free函數(shù)調(diào)用的形式為:free(p)p是指針變量,必須指向由動(dòng)態(tài)分配函數(shù)malloc分配的地址

6、,free函數(shù)將指針p所指的存儲(chǔ)空間釋放,使這部分空間可以由系統(tǒng)重新支配。此函數(shù)沒有返回值。13.2.2 calloc函數(shù)calloc函數(shù)的調(diào)用形式為:calloc(n,size);n和size的類型都為unsigned int型。其返回值的類型為void*。calloc函數(shù)用來給n個(gè)同一類型的數(shù)據(jù)項(xiàng)分配連續(xù)的存儲(chǔ)空間。每個(gè)數(shù)據(jù)項(xiàng)的長(zhǎng)度為size個(gè)字節(jié),若分配成功,函數(shù)返回存儲(chǔ)空間的首地址。否則返回空。由調(diào)用calloc函數(shù)所分配的存儲(chǔ)單元,系統(tǒng)自動(dòng)設(shè)置初值為0。 區(qū)別:calloc 初始化為0或者空 malloc不初始化例如:char *ps;ps=(char *)calloc(10,sizeof(char);ps=(char *)malloc(10*sizeof(char);以上語句開辟了10個(gè)連續(xù)的char類型的存儲(chǔ)單元,由ps指向存儲(chǔ)單元的首地址。每個(gè)存儲(chǔ)單元可以存放一個(gè)字符。顯然,使用calloc函數(shù)開辟的動(dòng)態(tài)存儲(chǔ)單元相當(dāng)于開辟了

溫馨提示

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

評(píng)論

0/150

提交評(píng)論