局部變量,塊內(nèi)的變量(函數(shù)為最大的塊)
全局變量在所有函數(shù)之外(函數(shù)都可用)
內(nèi)存:
代碼區(qū) 數(shù)據(jù)區(qū)
棧為局部變量
堆區(qū)為動(dòng)態(tài)分配
全局?jǐn)?shù)據(jù)區(qū),靜態(tài)數(shù)據(jù)區(qū)
常量區(qū),主要是字面量,內(nèi)存為只讀的。
函數(shù)的形參,可以給默認(rèn)值
可以為形參指定默認(rèn)值(從右向左),調(diào)用時(shí)可以不用傳遞參數(shù)。
fact(int n,int m = 1);
但是不能跳躍傳遞參數(shù),二義性!
enum Sex{
MALE,FEMALE
}
void disp(char* name, Sex gender = MALE);
函數(shù)聲明中指定了默認(rèn)值,不能在定義時(shí),再指定默認(rèn)值,但可以追加默認(rèn)值。
fact(int , int =1); 這樣聲明沒(méi)問(wèn)題。
內(nèi)聯(lián)函數(shù),提高程序運(yùn)行效率,調(diào)用函數(shù)時(shí),不是調(diào)用,而是搬一份到調(diào)用處,不用進(jìn)行真正函數(shù)調(diào)用,所以無(wú)開(kāi)辟棧的開(kāi)銷。
會(huì)增加代碼的長(zhǎng)度
如果函數(shù)很復(fù)雜,不能成為內(nèi)聯(lián)函數(shù)。不支持控制結(jié)果。
規(guī)定1,必須先定義,不支持函數(shù)原形。
因?yàn)榘岷瘮?shù)代碼時(shí),是在編譯過(guò)程中進(jìn)行的。
比較 調(diào)用開(kāi)銷 VS 執(zhí)行開(kāi)銷,來(lái)判斷是否使用內(nèi)聯(lián)函數(shù),對(duì)于很簡(jiǎn)單的函數(shù)值得內(nèi)聯(lián)。
2.是否能成為內(nèi)聯(lián)函數(shù)完全有編譯程序決定
3.不支持控制結(jié)構(gòu)。











































遞歸函數(shù)
一個(gè)函數(shù)自己調(diào)用自己,不管問(wèn)題多復(fù)雜,只要把問(wèn)題簡(jiǎn)化為最簡(jiǎn)單的形式。
遞歸函數(shù)不可能是內(nèi)聯(lián)函數(shù)
效率,遞歸 < 循環(huán) < 公式
任何遞歸都可以改為非遞歸,需要用到棧,代碼就很看懂了。改后,不一定提高效率。因?yàn)檫f歸本身就是去開(kāi)辟棧完成的。為何不保留代碼可讀性呢。
唯一條件,遞歸必須存在一個(gè)必須滿足的條件,以結(jié)束推出。
菲波那契數(shù)列,求對(duì)應(yīng)位置的值
頭文件






函數(shù)定義文件,遞歸

































主函數(shù)文件















