動態(tài)規(guī)劃——編譯預(yù)處理和動態(tài)存儲分配.ppt_第1頁
動態(tài)規(guī)劃——編譯預(yù)處理和動態(tài)存儲分配.ppt_第2頁
動態(tài)規(guī)劃——編譯預(yù)處理和動態(tài)存儲分配.ppt_第3頁
動態(tài)規(guī)劃——編譯預(yù)處理和動態(tài)存儲分配.ppt_第4頁
動態(tài)規(guī)劃——編譯預(yù)處理和動態(tài)存儲分配.ppt_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

11.1 編譯預(yù)處理 11.1.1 宏替換 11.1.2 文件包含 11.2 動態(tài)存儲分配,第11章 編譯預(yù)處理和動態(tài)存儲分配,11.1 編譯預(yù)處理 凡是以#開頭的行,稱為“編譯預(yù)處理”命令行,作用:對源程序編譯之前做一些處理, 然后將預(yù)處理的結(jié)果和源程序一起再進行正常的編譯處理以得到目標(biāo)代碼。 種類 宏定義 #define 文件包含 #include 格式: “#”開頭 占單獨書寫行 語句尾不加分號,如 if(x=YES) printf(“correct!n”); else if (x=NO) printf(“error!n”); 展開后: if(x=1) printf(“correct!n”); else if (x=0) printf(“error!n”);,11.1.1宏替換 不帶參數(shù)宏替換 一般形式: #define 宏名 宏體 功能:用字符序列(宏體)代替指定標(biāo)識符(宏名),宏展開:預(yù)編譯時,用宏體替換宏名-不作語法檢查,如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);,宏體可缺省,可包含已 定義過的宏名,定義位置:一般在程序開頭 作用域:從定義命令到文件結(jié)束 #undef可終止宏名作用域 格式: #undef 宏名,宏定義可嵌套,不能遞歸,例 #define MAX MAX+10 (),引號中的內(nèi)容與宏名相同也不置換,例 #define PI 3.14159 printf(“2*PI=%fn”,PI*2); 宏展開:printf(“2*PI=%fn”,3.14159*2);,宏定義中使用必要的括號(),例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2; 宏展開:var= 80+40 *2;,說明: 宏名一般用大寫字母。這不是語法規(guī)定,只是一種習(xí)慣。 可以使用宏名代替一個字符串 當(dāng)宏定義在一行中寫不下,需要在下一行繼續(xù)時,只需在最后一個字符后緊接一個反斜線“”。例如: #define LEAP_YEAR year % 4=0 & year %100!=0 | year % 400=0 注意在第二行開始不要有空格,否則空格會一起被替換。 宏名的有效范圍為定義命令之后到本源文件結(jié)束,除非用#undef命令終止宏名的作用域。 對程序中用雙引號括起來的字符串內(nèi)的子串和用戶標(biāo)識符中的成分不做替換。 同一個宏名不能重復(fù)定義。,帶參數(shù)宏替換 一般形式: #define 宏名(參數(shù)表) 宏體,例 #define S (r) PI*r*r 相當(dāng)于定義了不帶參宏S,代表字符串“(r) PI*r*r”,宏展開:形參用實參換,其它字符保留 宏體及各形參外一般應(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+y*x+y; 一般寫成: #define POWER(x) (x)*(x) 宏展開: z=(x+y)*(x+y);,帶參的宏與函數(shù)區(qū)別,11.1.2 文件包含 功能:一個源文件可將另一個源文件的內(nèi)容全部包含進來 一般形式: #include “文件名” 或 #include ,處理過程:預(yù)編譯時,用被包含文件的內(nèi)容取代該預(yù)處理命令,再對“包含”后的文件作一個源文件編譯, 直接按標(biāo)準(zhǔn)目錄搜索 “” 先在當(dāng)前目錄搜索,再搜索標(biāo)準(zhǔn)目錄 可指定路徑,被包含文件內(nèi)容 源文件(*.c) 頭文件(*.h),宏定義 數(shù)據(jù)結(jié)構(gòu)定義 函數(shù)說明等,文件包含可嵌套,例 文件包含舉例,11.2動態(tài)存儲分配,內(nèi)存空間分配方式:靜態(tài)存儲分配和動態(tài)存儲分配 靜態(tài)存儲分配:c編譯程序根據(jù)他們的大小分配內(nèi)存空間,并且內(nèi)存空間在整個生存期是固定不變的。這種分配方式稱為靜態(tài)存儲分配。 動態(tài)存儲分配:在程序執(zhí)行期間動態(tài)需要空間存儲數(shù)據(jù),當(dāng)空間不需要時可以隨時釋放分配的空間。這種分配方式稱為動態(tài)存儲分配。 系統(tǒng)提供了4個函數(shù):malloc calloc free realloc 頭文件stdlib.h中,1、malloc函數(shù) void *malloc(unsigned size); 功能:分配size個字節(jié)的存儲空間 返回值:分配內(nèi)存空間的地址,如不成功返回0。 例:int *pi; float *pf; pi=(int *)malloc(2);pf=(float *)malloc(4); pi=(int *)malloc(sizeof(int) /*系統(tǒng)計算指定類型的字節(jié)數(shù)*/ pf=(float *)malloc(sizeof(float) 2、free函數(shù) 函數(shù)的調(diào)用形式 :free(p)/*將指針p所指存儲空間釋放*/,3、calloc函數(shù) void *calloc(unsigned n,unsigned size); 功能:用來給n個同一類型的數(shù)據(jù)項連續(xù)的分配存儲空 間。每個數(shù)據(jù)項長度為size個字節(jié)。 返回值:分配內(nèi)存空間的首地址,如不成功返回0。 例

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論