版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、白 雪 飛中國科學(xué)技術(shù)大學(xué)電子科學(xué)與技術(shù)系Dept. of Elec. Sci. & Tech., USTCFall, 2007l函數(shù)概述l函數(shù)定義的一樣形式l函數(shù)的調(diào)用、指標(biāo)和返回值l局部變量和全局變量l變量的存儲(chǔ)類型l內(nèi)部函數(shù)和外部函數(shù)lC語言用函數(shù)實(shí)現(xiàn)程序模塊化l一個(gè)程序由一個(gè)或多個(gè)源程序文件組成l一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)組成lC程序的履行從main函數(shù)最先,同時(shí)回到main函數(shù)結(jié)束l函數(shù)之間能夠彼此調(diào)用,或調(diào)用自身l不能調(diào)用main函數(shù)l函數(shù)之間彼此獨(dú)站,不存在從屬關(guān)系l函數(shù)定義形式l返回類型 函數(shù)名(指標(biāo)表明)ll 表明部分l 語句ll返回類型、指標(biāo)、函數(shù)體內(nèi)容都可沒有l(wèi)dum
2、my()l* does nothing & returns nothing *l對于“返回類型”l指函數(shù)返回值的類型l如果省略此項(xiàng),那么信任返回類型是intl如果無返回值,那么定義返回類型為voidl對于“指標(biāo)表明”l類型 形參名, 類型 形參名, .l對于“表明部分”l指變量、函數(shù)的表明int max(int x, int y)int z;z = xy?x:y;return z;int min(int x, int y)return xy?x:y; lmax(a, 3); *函數(shù)調(diào)用*l值傳遞l實(shí)參對形參的信息傳遞是“值傳遞”l單向傳遞l只能把實(shí)參的值傳遞給形參l不能把形參的值傳遞給實(shí)參l對
3、形參的值所作的改變不能帶回給實(shí)參l實(shí)參和形參是差別的變量l具有差別的存儲(chǔ)空間l具有差別的生活期和作用域void swap(int x, int y)int t;t=x, x=y, y=t;int main()int a=1, b=4;swap(a, b);1a4b1x4y41l形式l形式一:return;l形式二:return expression;l功能l函數(shù)返回語句l結(jié)束函數(shù)調(diào)用l似果需要,還能夠帶回函數(shù)返回值l返回值的講明l函數(shù)返回值的類型在函數(shù)定義中指定l函數(shù)返回值通過函數(shù)中的return語句獲得l如果函數(shù)無返回值,那么能夠沒有return語句lreturn語句后的表達(dá)式類型,應(yīng)與函數(shù)
4、返回值類型一樣,或能夠兼容賦值;兩者類型差別時(shí),自動(dòng)做類型變形l函數(shù)需要返回值時(shí),如果貧乏return語句,或return語句未帶返回值,那么返回一個(gè)不確定值l一樣形式l函數(shù)名(實(shí)參表列)l講明l縱然沒有實(shí)參,()也不能省略l多個(gè)實(shí)參之間用逗號(hào)分隔l實(shí)介入形參按次序一一對應(yīng),類型應(yīng)匹配l實(shí)參的求值次序不確定,應(yīng)幸免對此敏感的調(diào)用形式lprintf(%d,%d, i, i+);l函數(shù)語句lprintf(%dn, i);l函數(shù)表達(dá)式l(c + d * max(a,b) % el函數(shù)指標(biāo)lgcd(max(a,b), min(c, d)l講明l函數(shù)調(diào)用能夠看作同返回類型的表達(dá)式使用l同時(shí),函數(shù)調(diào)用還完
5、成了函數(shù)中定義的操縱l一樣形式l類型 函數(shù)名(類型1, 類型2, .);l類型 函數(shù)名(類型1 形參1,l 類型2 形參2, .);l舉例lint max(int, int);lint max(int x, int y);lvoid dummy();* 無參函數(shù)原型 *lvoid dummy(void); * 同上 *l函數(shù)表明的形式即函數(shù)原型l在函數(shù)調(diào)用之前,應(yīng)對函數(shù)履行表明l函數(shù)表明能夠在主調(diào)函數(shù)的表明部分,也能夠在函數(shù)外部l函數(shù)外部的表明,對全部主調(diào)函數(shù)都起作用,不需要在主調(diào)函數(shù)內(nèi)再次表明l函數(shù)的定義也具有表明的作用l庫函數(shù)的表明包羅在頭文件(*.h)里,不需在源程序里表明int mai
6、n()int max(int x, int y); * 函數(shù)表明函數(shù)表明 *int a, b, c;c = max(a, b);int max(int x, int y)return xy?x:y;int max(int x, int y); * 函數(shù)表明函數(shù)表明 *int main()* 不需要再次表明不需要再次表明int max(int, int) *int a, b, c; c = max(a, b);int max(int x, int y)return xy?x:y;int max(int x, int y)* 函數(shù)定義具有表明作用函數(shù)定義具有表明作用 *return xy?x:y;
7、int main()* 不需要再次表明不需要再次表明int max(int, int) *int a, b, c;c = max(a, b);l調(diào)用一個(gè)函數(shù)的環(huán)節(jié)中,調(diào)用另一函數(shù)main函數(shù)函數(shù)結(jié)束結(jié)束調(diào)用調(diào)用a函數(shù)函數(shù)b函數(shù)函數(shù)a函數(shù)函數(shù)調(diào)用調(diào)用b函數(shù)函數(shù)l一個(gè)函數(shù)直截了當(dāng)或間接的調(diào)用它自身l必須有必然的前提推斷語句,使得遞回調(diào)用能夠終止f函數(shù)函數(shù)調(diào)用調(diào)用f函數(shù)函數(shù)f1函數(shù)函數(shù)調(diào)用調(diào)用f2函數(shù)函數(shù)f2函數(shù)函數(shù)調(diào)用調(diào)用f1函數(shù)函數(shù)lHanoi塔 (漢諾塔、河內(nèi)塔、梵塔)l解法lN=1時(shí),Hanoi(1)易解l如果Hanoi(N-1)可解,那么Hanoi(N)易解lStep1. N-1個(gè)盤子,借
8、助3,從1移到2lStep2. 把最大的盤子從1移到3lStep3. N-1個(gè)盤子,借助1,從2移到3l復(fù)雜度l移動(dòng)次數(shù):2N-1lN=64,移動(dòng)次數(shù)1.84467E+19l作用域l變量有效的代碼空間l變量在作用域才能被引用l變量能夠分為局部變量和全局變量l生活期l變量有效的運(yùn)行時(shí)候l變量在生活期內(nèi)才存在l變量能夠分為靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)l局部變量l函數(shù)或復(fù)合語句內(nèi)部定義的變量l講明l作用域?yàn)楸竞瘮?shù)或復(fù)合語句范疇l差別函數(shù)內(nèi)的局部變量能夠重名,它們是差別的變量,作用域差別,不大概彼此干擾l函數(shù)形參也是局部變量的一種l如果多個(gè)同名局部變量作用域疊加,那么最內(nèi)層復(fù)合語句中定義的局部變量有效 floa
9、t foo(int x) int a, i, j; * 局部變量局部變量 * . . * 只能用在只能用在foo內(nèi)部內(nèi)部 * int main() int a, b, c; * 局部變量局部變量 * . . * 只能用在只能用在main內(nèi)部內(nèi)部 * x,a,i,j作用域作用域a,b,c作用域作用域int main() int a, b, i; . . int c, i; c = a + b; i = a - b; . . . .a,b,i作用域作用域c,i作用域作用域此范疇內(nèi)復(fù)合語句此范疇內(nèi)復(fù)合語句中定義的中定義的i有效有效l全局變量(外部變量)l函數(shù)之外定義的變量l講明l作用域從變量定義處到
10、本源程序文件結(jié)束l全局變量能夠被本文件的函數(shù)所共用l增加函數(shù)間傳遞信息的渠道l如果全局變量與局部變量重名,那么局部變量在作用域內(nèi)屏蔽全局變量l應(yīng)限制使用過多全局變量int a=10, b=5, x, y; * 全局變量全局變量 *int max(int x, int y) return xy?x:y;int c; * 全局變量全局變量 *int main() int a=8; c=max(a, b); * 引用局部變量引用局部變量a *全局變量c作用域全局變量a,b,x,y作用域形參x,y作用域局部變量a作用域l動(dòng)態(tài)存儲(chǔ)方式l程序運(yùn)行期間依照需要?jiǎng)討B(tài)安排存儲(chǔ)空間l函數(shù)形參、自動(dòng)變量等l每次調(diào)用
11、函數(shù)時(shí),給該函數(shù)中的局部變量和形參安排存儲(chǔ)空間,函數(shù)返回后釋放空間l靜態(tài)存儲(chǔ)方式l程序運(yùn)行期間安排固定的存儲(chǔ)空間l全局變量全部存放在靜態(tài)存儲(chǔ)區(qū)中l(wèi)自動(dòng)變量autol寄存器變量registerl靜態(tài)變量staticl外部變量externlauto變量變量l局部變量局部變量,用用auto關(guān)鍵字修飾關(guān)鍵字修飾lauto能夠省略能夠省略,是缺省的存儲(chǔ)方式是缺省的存儲(chǔ)方式l自動(dòng)安排和釋放存儲(chǔ)空間自動(dòng)安排和釋放存儲(chǔ)空間l舉例舉例int foo(int x) auto int a, b, c=6; * 定義自動(dòng)變量定義自動(dòng)變量a,b,c * float f, g=0.1;* 定義自動(dòng)變量定義自動(dòng)變量f,g
12、*lregister變量變量l存放在存放在CPU寄存器中寄存器中,存取速度快存取速度快l寄存器變量只能動(dòng)態(tài)安排存儲(chǔ)空間寄存器變量只能動(dòng)態(tài)安排存儲(chǔ)空間(寄存寄存器器)l只有自動(dòng)變量和形參能夠做為寄存器變只有自動(dòng)變量和形參能夠做為寄存器變量量l舉例舉例int foo(int x) register int i;* 定義寄存器變量定義寄存器變量i * for(i=0; i10000; i+). * i用于循環(huán)變量用于循環(huán)變量 *l靜態(tài)局部變量l局部變量,用static關(guān)鍵字修飾l靜態(tài)局部變量為靜態(tài)存儲(chǔ),整個(gè)程序運(yùn)行期間都不釋放,其值不大概丟失l在函數(shù)調(diào)用結(jié)束后,靜態(tài)局部變量雖仍舊存在,但差不多不在變
13、量的作用域內(nèi),所以其他函數(shù)不能引用它l靜態(tài)局部變量在編譯時(shí)賦初值,且只賦一次l如果不對靜態(tài)局部變量賦初值,那么初值為0int f(int a) int b=0; static int c=3; b+; c+; return a+b+c;int main() int x=2, i; for(i=0;iy?x:y;int main() extern A, B;* extern表明外部變量表明外部變量 * printf(%d, max(A, B); * 在定義之前使用外部變量在定義之前使用外部變量 *int A=13, B=-8; * 定義外部變量定義外部變量 * file1.c * 表明外部變量表
14、明外部變量 *extern A, B;int main() int c; c=max(A, B); printf(%d, c);* file2.c * 定義外部變量定義外部變量 *int A=13, B=-8;int max(int x, int y) int z; z=xy?x:y; return z;l靜態(tài)外部變量l限制外部變量只能被本文件引用l靜態(tài)外部變量不能被其他文件引用l舉例* file1.c *static int A;int main() . .* file2.c *extern int A;void foo(int n) A = A * n;不能引用靜態(tài)外部變量Al表明 (De
15、claration)l對變量的某些屬性加以講明l定義 (Definition)l定義一個(gè)新的變量,同時(shí)安排存儲(chǔ)空間l定義有表明的功能,但表明不必然根基上定義l舉例int main() extern A; * 表明而非定義表明而非定義,表明表明A為已定義外部變量為已定義外部變量 * . .int A; * 定義定義A為整型外部變量為整型外部變量 *l局部變量l自動(dòng)變量(脫離函數(shù),值便消散)l寄存器變量(脫離函數(shù),值便消散)l形式指標(biāo)(可為自動(dòng)或寄存器變量)l靜態(tài)局部變量(脫離函數(shù),值仍保留)l全局變量l靜態(tài)外部變量(只限本文件引用)l非靜態(tài)外部變量(許可其他文件引用)l動(dòng)態(tài)存儲(chǔ)l自動(dòng)變量(本函數(shù)
16、內(nèi)有效)l寄存器變量(本函數(shù)內(nèi)有效)l形式指標(biāo)(本函數(shù)內(nèi)有效)l靜態(tài)存儲(chǔ)l靜態(tài)局部變量(本函數(shù)內(nèi)有效)l靜態(tài)外部變量(本文件內(nèi)有效)l非靜態(tài)外部變量(其他文件能夠引用)l內(nèi)存動(dòng)態(tài)存儲(chǔ)區(qū)l自動(dòng)變量l形式指標(biāo)l內(nèi)存靜態(tài)存儲(chǔ)區(qū)l靜態(tài)局部變量l靜態(tài)外部變量(本文件內(nèi)有效)l非靜態(tài)外部變量(其他文件能夠引用)lCPU中的寄存器l寄存器變量變量存儲(chǔ)類型函數(shù)內(nèi)函數(shù)外作用域生活期作用域生活期自動(dòng)變量形式指標(biāo)寄存器變量靜態(tài)局部變量靜態(tài)外部變量非靜態(tài)外部變量只限本文件其他文件也能夠引用l定義形式lstatic 類型 函數(shù)名(形參表)l講明l內(nèi)部函數(shù)又稱靜態(tài)函數(shù)l內(nèi)部函數(shù)只能在所在文件中使用l類似于靜態(tài)外部變量的作用范疇l舉例lstatic int foo(int a, int b);l定義形式lextern 類型 函數(shù)名(形參表)l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年銷售經(jīng)理年終個(gè)人工作總結(jié)4篇
- 《采用合理的論證方法》課件 2024-2025學(xué)年統(tǒng)編版高中語文選擇性必修上冊
- 2025年春九年級物理下冊 第十七、十八章綜合測試卷(蘇科版)
- 石河子大學(xué)《文化遺產(chǎn)概論》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《攝影》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《機(jī)械原理》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《專題產(chǎn)品設(shè)計(jì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《線性控制系統(tǒng)》2022-2023學(xué)年期末試卷
- 沈陽理工大學(xué)《熱工與流體力學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)基礎(chǔ)》2022-2023學(xué)年期末試卷
- 2024年職業(yè)病防治考試題庫附答案(版)
- 創(chuàng)新實(shí)踐(理論)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 市三級公立綜合醫(yī)院績效考核指標(biāo)評分細(xì)則
- 四年級教材《勞動(dòng)》課件
- MOOC 人像攝影-中國傳媒大學(xué) 中國大學(xué)慕課答案
- 全國仿真職業(yè)技能競賽考試題庫及答案
- 手動(dòng)液壓叉車安全技術(shù)培訓(xùn)
- 超星爾雅學(xué)習(xí)通《當(dāng)代大學(xué)生國家安全教育》章節(jié)測試答案
- 小學(xué)一年級上冊 綜合實(shí)踐教學(xué)課件
- 一年級期中家長會(huì)ppt課件(PPT 23頁)
- 敬老院院務(wù)管理委員會(huì)組織結(jié)構(gòu)圖和崗位職責(zé)
評論
0/150
提交評論