




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第13 章 編譯預(yù)處理和動態(tài)存儲分配,Top77 不帶參數(shù)的宏替換,Top78 帶參數(shù)的宏替換,Top79 對編譯預(yù)處理的一些說明,Top80 動態(tài)存儲分配,Top77 不帶參數(shù)的宏替換,考點(diǎn) 一般定義形式為:#define 宏名 字符串,說明: 宏定義與一般變量定義含義不同,它只作字符替換, 并不分配內(nèi)存空間,也不能認(rèn)為是賦值。,“#”表示這是一條預(yù)處理命令 define為宏定義命令 宏名為一個合法的標(biāo)識符 字符串可以是常數(shù)、表達(dá)式或語句,或是多條語句,2.宏展開:預(yù)編譯時,用宏體替換宏名-不作語法檢查,3.引號中的內(nèi)容與宏名相同也不置換,例 #define PI 3.14159 print
2、f(“2*PI=%fn”,PI*2); 宏展開:printf(“2*PI=%fn”,3.14159*2);,4.宏定義可嵌套,不能遞歸,例 #define MAX MAX+10 (),5.宏定義中使用必要的括號(),例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2; 宏展開:var= 80+40 *2;,Top78 不帶參數(shù)的宏替換,真題分析 (2006年9月)若要求定義具有10 個int 型元素的一維數(shù)組a,則下列定義語句中錯誤的是,A、#define N 10 int a N;,B、#define n 5 int a 2*n;,
3、C、int a 5+5;,D、int n=10,a n;,D,Top78 不帶參數(shù)的宏替換,真題分析 (2005-9)下列程序的功能是:給r 輸入數(shù)據(jù)后計算半徑為r 的圓面積s。程序在編譯時出錯,出錯的原因是,A、注釋語句書寫位置錯誤,B、存放圓半徑的變量r 不應(yīng)該定義為整型,C、輸出語句中格式描述符非法,D、計算圓面積的賦值語句中使用了非法變量,D,main( ) /* Beginning */ int r; float s; scanf(%d, ,Top78 不帶參數(shù)的宏替換,真題分析 (2005-4)下列程序的輸出結(jié)果是,A、192,B、29,C、25,D、編譯出錯,#define P
4、3 F(int x) return(P*x*x); main( ) printf(%dn,F(3+5); ,A,Top78 帶參數(shù)的宏替換,帶參數(shù)宏定義 一般形式: #define 宏名(參數(shù)表) 宏體,例 #define S (r) PI*r*r 相當(dāng)于定義了不帶參宏S,代表字符串“(r) PI*r*r”,宏展開:形參用實(shí)參換,其它字符保留 宏體及各形參外一般應(yīng)加括號(),例 #define S(a,b) a*b . area=S(3,2); 宏展開: area=3*2;,不能加空格,例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y); 宏展開:z=x
5、+y*x+y; 一般寫成: #define POWER(x) (x)*(x) 宏展開: z=(x+y)*(x+y);,Top78 帶參數(shù)的宏替換,帶參的宏與函數(shù)區(qū)別,Top78 帶參數(shù)的宏替換,Top78 帶參數(shù)的宏替換,真題分析 (2007年4月)有一個名為init.txt的文件,內(nèi)容如下,#define HDY(A,B) A/B #define PRINT(Y) printf(“y=%dn”,Y),有以下程序,#include “stdio.h” #include “init.txt” main() int a=1,b=2,c=3,d=4,k; k=HDY(a+c,b+d);PRINT(k
6、); ,下面針對該程序的敘述正確的是:,編譯出錯,A.,運(yùn)行出錯,D.,運(yùn)行結(jié)果為y=0,C.,運(yùn)行結(jié)果為y=6,B.,D,Top78 帶參數(shù)的宏替換,真題分析 (2005年9月)有下列程序,程序運(yùn)行后的輸出結(jié)果是,A、64,28,B、4,4,C、4,3,D、64,64,#define f(x)=(x*x) main( ) int i1,i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); prinft(%d,%dn,i1,i2); ,C,Top78 帶參數(shù)的宏替換,真題分析 (2005年4月)下列敘述中正確的是 A、預(yù)處理命令行必須位于源文件的開頭 B、在源文件的一行上可以
7、有多條預(yù)處理命令 C、宏名必須用大寫字母表示 D、宏替換不占用程序的運(yùn)行時間,D,Top79 對編譯預(yù)處理的一些說明,考點(diǎn):,在C語言中,凡是以“#”開頭的行,都稱為“編譯預(yù)處理”命令行,種類 宏定義 #define 文件包含 #include 條件編譯 #if-#else-#endif等,格式: “#”開頭 占單獨(dú)書寫行 語句尾不加分號,Top79 對編譯預(yù)處理的一些說明,真題分析 (2006年4月)下列敘述中正確的是 A、預(yù)處理命令行必須位于C 源程序的起始位置 B、在C 語言中,預(yù)處理命令行都以#開頭 C、每個C 程序必須在開頭包含預(yù)處理命令行:#include D、 C 語言的預(yù)處理不
8、能實(shí)現(xiàn)宏定義和條件編譯的功能,B,Top79 對編譯預(yù)處理的一些說明,練習(xí)題 1、以下敘述中正確的是 A、預(yù)處理命令必須位于源文件的開頭 B、在源文件的一行上可以有多條預(yù)處理命令 C、宏名必須用大寫字母表示 D、宏替換不占用程序的運(yùn)行時間,D,Top80動態(tài)存儲分配,靜態(tài)存儲分配:用于存儲數(shù)據(jù)的變量和數(shù)組都是在說明部分定義的,C編譯系統(tǒng)通過定義語句了解它們所需要的空間,并預(yù)先為其分配適當(dāng)?shù)拇鎯卧?。這些存儲單元一經(jīng),在變量或數(shù)組的生存期內(nèi)是固定不變的。 動態(tài)存儲分配:在程序執(zhí)行期間,通過”申請“得到指定的內(nèi)存單元;當(dāng)有閑置不用的空間時,可以隨時將其釋放,由系統(tǒng)另作它用。,四個和動態(tài)存儲分配有關(guān)
9、的函數(shù): (1)malloc (2)calloc (3)free (4)realloc 使用這些函數(shù)時,要包含頭文件”stdlib.h“,Top80 動態(tài)存儲分配,(1)malloc函數(shù),其返回值類型為void。 調(diào)用形式為:malloc(size) 要求size的類型為unsigned int 作用:用來分配size個字節(jié)的存儲空間,返回一個指針指向存儲區(qū)首地 址的基類型為void的地址。,例: short int *pi; float *pf; pi=(short *)malloc(2); pf=(float *)malloc(4);,說明: (1)因?yàn)閙alloc是void型的,所以需要
10、強(qiáng)制轉(zhuǎn)換類型 (2)強(qiáng)制轉(zhuǎn)換類型括號中的不可少,否則就變成了普通類型。,if(pi!=NULL) *p=6; if(pf!=NULL) *pf=3.8,Top80 動態(tài)存儲分配,注意: 由動態(tài)存儲分配得到的存儲單元沒有名字,只能靠指針來引用它。一旦指針改變指向,則原存儲單元及所存數(shù)據(jù)都將無法引用。 通過調(diào)用malloc函數(shù)所分配的單元動態(tài)存儲單元中沒有確定的初值。 在動態(tài)申請存儲空間時,若不能確定數(shù)據(jù)類型所占字節(jié)數(shù),可通過sizeof運(yùn)算符來求得。例如: pi=(int *)malloc(sizeof(int); pf=(float *)malloc(sizeof(float); 由系統(tǒng)來計算
11、指定類型所占的字節(jié)數(shù),有利于程序的移植。,Top80 動態(tài)存儲分配,(3)calloc函數(shù),返回值類型為void。 調(diào)用形式:calloc(n,size) 要求n和size都是unsigned int。 作用:用來給n個同一類型的數(shù)據(jù)項(xiàng)分配連續(xù)的存儲空間,每個數(shù)據(jù)項(xiàng) 長度為size字節(jié)。,(2)free函數(shù),沒有返回值。 調(diào)用形式為:free(p); p必須是指向由動態(tài)存儲分配函數(shù)malloc或calloc分配的地址。 作用:將使指針p所指的存儲空間釋放,使這部分空間重新歸系統(tǒng)支配。,通過calloc函數(shù)所分配的存儲單元,系統(tǒng)自動賦初值0。例如: char *ps; ps=(char *)calloc(10,sizeof(char); 說明: 以上函數(shù)調(diào)用語句開辟了10個連續(xù)的存儲單元,由ps指向存儲單元的首地址。每個單元可以存儲一個字符。 用calloc函數(shù)開辟的動態(tài)存儲單元相當(dāng)于開辟了一個一維數(shù)組。函數(shù)的第一個參數(shù)是數(shù)組的大小,第二個是數(shù)組元素的類型。函數(shù)的返回值就是數(shù)組的首地址。 使用該函數(shù)分配的地址,同樣可以用函數(shù)free來釋放。,Top80 動態(tài)存儲分配,Top80 動態(tài)存儲分配,真題分析 (2007年4月)以下程序的輸出結(jié)果是,#includemain()char *s1,*s2,m;s1=s2=(char*)malloc(s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京七中學(xué)2025屆化學(xué)九上期末質(zhì)量檢測試題含解析
- 浙江省寧波市2024-2025學(xué)年八年級物理第一學(xué)期期末綜合測試試題含解析
- 重慶市榮昌區(qū)2025屆數(shù)學(xué)八年級第一學(xué)期期末監(jiān)測試題含解析
- 人力資源招聘與培訓(xùn)管理制度
- 游樂場賬號申請與注銷管理制度
- 2025至2030年中國石子壓碎值儀數(shù)據(jù)監(jiān)測研究報告
- 隴川農(nóng)場綜合管理辦法
- 攀枝花倉庫管理辦法細(xì)則
- 內(nèi)蒙古林業(yè)用地管理辦法
- 周村區(qū)閑置資產(chǎn)管理辦法
- 嘉峪關(guān)市招聘公辦幼兒園編制外聘用制教師考試真題2022
- 塔吊基礎(chǔ)沉降觀測記錄
- 綜合日語說課講課公開課一等獎市優(yōu)質(zhì)課賽課獲獎?wù)n件
- 教師職業(yè)道德(高職)PPT完整全套教學(xué)課件
- 茶樓服務(wù)員的禮儀培訓(xùn)資料
- GB/T 5976-2006鋼絲繩夾
- GB/T 4169.3-2006塑料注射模零件第3部分:帶頭導(dǎo)套
- GB/T 12325-2008電能質(zhì)量供電電壓偏差
- 醫(yī)德醫(yī)風(fēng)培訓(xùn)
- 新《高等教育學(xué)》考試復(fù)習(xí)題庫450題(含各題型)
- 日照正濟(jì)藥業(yè)有限公司創(chuàng)新原料藥及制劑研發(fā)生產(chǎn)項(xiàng)目一期工程職業(yè)病危害預(yù)評價報告
評論
0/150
提交評論