




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十一講,Begin:,第七章 函數(shù),變量的存儲(chǔ)類別 外部函數(shù) 內(nèi)部函數(shù),對(duì)變量的定義需要給出兩方面的屬性:,指變量的名稱、類型、取值范圍和占據(jù)存貯空間的大小。如 整型,實(shí)型,字符型等。,變量存在的時(shí)間(生存期)、作用范圍和在硬件中存放的地點(diǎn)(區(qū)域)。,變量定義的一般形式為:,一、變量的存儲(chǔ)類型,7.5.2 變量的存儲(chǔ)類別,內(nèi)存中供用戶使用的空間有三部分:,存放程序的可執(zhí)行代碼。,存放全局變量和靜態(tài)局部變量。,存放函數(shù)調(diào)用時(shí)調(diào)用函數(shù)的現(xiàn)場(chǎng)保護(hù)、自動(dòng)局部變量和函數(shù)形參。,7.5.2 變量的存儲(chǔ)類別,1、 自動(dòng)變量,用關(guān)鍵字auto作存儲(chǔ)類型說(shuō)明的局部變量(包括形參)稱為自動(dòng)變量。 自動(dòng)變量存放在
2、動(dòng)態(tài)存儲(chǔ)區(qū),都是動(dòng)態(tài)分配存儲(chǔ)空間的。 C語(yǔ)言規(guī)定:在局部變量的定義中,可省略關(guān)鍵字auto。即:沒(méi)有指明存儲(chǔ)類別的變量,一律隱含為:自動(dòng)變量。,7.5.2 變量的存儲(chǔ)類別,例 自動(dòng)變量的特點(diǎn)示例。 #include void f (int n) auto int s=0; /*auto可以省略*/ s=s+1; printf(No.%d:s=%dn,n,s); void main( ) int num; for(num=1;num4;num+) f (num); ,程序運(yùn)行結(jié)果: NO.1:s=1 NO.2:s=1 NO.3:s=1,7.5.2 變量的存儲(chǔ)類別,2、靜態(tài)變量,所有全局變量和用關(guān)
3、鍵字static作存儲(chǔ)類型說(shuō)明的局部變量稱為靜態(tài)變量。 靜態(tài)變量存放在靜態(tài)存儲(chǔ)區(qū),一旦為其分配了存儲(chǔ)單元,它們?cè)谡麄€(gè)程序執(zhí)行期間將固定地占用這些存儲(chǔ)單元。 由于所有全局變量都是靜態(tài)類的,C規(guī)定,在定義全局變量時(shí)“static”可以省去不寫。 靜態(tài)全局變量?jī)H能為本源文件中各函數(shù)使用,不能為本源文件以外的其他源文件使用。,7.5.2 變量的存儲(chǔ)類別,例 局部靜態(tài)變量的特點(diǎn)示例。 #include void f (int n) static int s=0; s=s+1; printf(No.%d:s=%dn,n,s); void main( ) int num; for(num=1;num4;nu
4、m+) f (num); ,程序運(yùn)行結(jié)果: NO.1:s=1 NO.2:s=2 NO.3:s=3,7.5.2 變量的存儲(chǔ)類別,靜態(tài)變量舉例,int hanshu( int x ) static int m=0, n=5; /* 定義m,n為靜態(tài)局部變量 */ int y=0 ; printf(m=%d,n=%d,y=%dn, m, n, y); m+ ; n+ ; y+ ; return ( x+y+m+n ); void main ( ) int a=2 , k ; for ( k=1;k=3;k+) printf(%d)hanshu(%d)=%dn,k, a, hanshu(a); ,程序
5、運(yùn)行結(jié)果: m=0,n=5,y=0 1)hanshu(2)=10 m=1,n=6,y=0 2)hanshu(2)=12 m=2,n=7,y=0 3)hanshu(2)=14,靜態(tài)變量的特點(diǎn):,靜態(tài)局部變量在整個(gè)程序運(yùn)行期間固定占有存儲(chǔ)單元。 靜態(tài)局部變量和全局變量一樣,只在編譯時(shí)賦初值一次,以后每次函數(shù)調(diào)用時(shí)使用上次函數(shù)調(diào)用結(jié)束時(shí)的保留值。 靜態(tài)局部變量定義時(shí)如不賦初值,系統(tǒng)編譯時(shí)會(huì)自動(dòng)對(duì)數(shù)值型靜態(tài)局部變量賦初值為0;對(duì)字符型靜態(tài)局部變量賦初值為空字符0 。 靜態(tài)局部變量?jī)H能為本函數(shù)使用,其他函數(shù)不能使用和影響它們。,7.5.2 變量的存儲(chǔ)類別,自動(dòng)變量和靜態(tài)局部變量區(qū)別:,自動(dòng)變量的值在函數(shù)
6、調(diào)用結(jié)束后不再保留,下次調(diào)用不能使用已有的值。 靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后,仍然保留上次調(diào)用結(jié)束的值。,7.5.2 變量的存儲(chǔ)類別,在選擇使用靜態(tài)局部變量還是自動(dòng)變量,可以從以下兩點(diǎn)考慮: 如果需要在兩次函數(shù)調(diào)用之間保持上一次函數(shù)調(diào)用結(jié)果,可以使用靜態(tài)局部變量; 如果在每次調(diào)用函數(shù)時(shí)都必須對(duì)局部變量初始化,選擇自動(dòng)變量。 但是實(shí)際上靜態(tài)局部變量占用內(nèi)存時(shí)間較長(zhǎng),并且可讀性差,因此,除非必要,盡量避免使用靜態(tài)局部變量。,7.5.2 變量的存儲(chǔ)類別,3、寄存器變量(register),寄存器變量:用關(guān)鍵字register作存儲(chǔ)類型說(shuō)明的局部變量。 說(shuō)明: 寄存器變量只能用于基本整型變量、短整型變
7、量和字符型變量。 寄存器變量的分配方式是動(dòng)態(tài)分配的。 由于CPU中的通用寄存器數(shù)目有限,通常只把少數(shù)使用頻繁的變量定義為寄存器變量。對(duì)超出寄存器數(shù)目的寄存器變量作一般自動(dòng)變量處理。,7.5.2 變量的存儲(chǔ)類別,例 求n!的函數(shù),int fac(int n) register int i, f=1; /*定義i,f為寄存器變量*/ for ( i=1; i=n; i+) f=f*i; return f; void main( ) int k; for ( k=1; k=5; k+) printf( %d!=%dn, k, fac(k) ); ,7.5.2 變量的存儲(chǔ)類別,4、外部變量(exter
8、n),外部變量是指在函數(shù)之外定義的變量。外部變量也稱全局變量。它的作用域通常從變量的定義處開始,直到本程序文件的結(jié)束處。外部變量的定義通常放在所有使用它的函數(shù)前面。 利用關(guān)鍵字extern對(duì)外部變量加以聲明時(shí),可以是在一個(gè)源文件內(nèi),也可以在多個(gè)文件組成的程序中。,7.5.2 變量的存儲(chǔ)類別,對(duì)于由多個(gè)源文件組成C程序,C語(yǔ)言規(guī)定:對(duì)共用的外部變量可以在任一源文件中定義一次,其他源文件中用extern對(duì)其聲明后,即可使用。如果希望某些外部變量?jī)H限于本文件使用,則在定義外部變量時(shí)前面加一個(gè)static說(shuō)明。 外部變量的定義只有一次,其位置只能在函數(shù)外,并可對(duì)外部變量分配存儲(chǔ)單元,初始化。 外部變量
9、的聲明可以有多次,其位置在定義點(diǎn)之前任意處,不需要分配存儲(chǔ)空間。,7.5.2 變量的存儲(chǔ)類別,例 外部變量舉例(在同一源文件內(nèi)),int max( int a, int b ) int c ; c=ab?a:b ; return ( c ) ; void main( ) extern X, Y ; /* 聲明外部變量*/ printf(%dn, max(X, Y); int X=12, Y=-8; /* 定義外部變量 */,7.5.2 變量的存儲(chǔ)類別,例:外部變量舉例(在兩個(gè)文件中) 求 ab。,文件1:f1.c #include c:userf2.c extern int pow(int n
10、); int X; /*定義外部變量*/ void main( ) int a=4,b=5; X=a; printf(%dn, pow(b); ,文件2:f2.c extern X; /*聲明外部變量*/ int pow(int n) int i,y=1; for(i=1;i=n;i+) y=y*X; return y; ,7.5.2 變量的存儲(chǔ)類別,對(duì)于一個(gè)由多個(gè)源程序文件組成C程序,在一個(gè)文件中定義的函數(shù),能否被其他文件中的函數(shù)調(diào)用呢?這取決于該函數(shù)是外部函數(shù)還是內(nèi)部函數(shù)。,7.6 內(nèi)部函數(shù)和外部函數(shù),1、 內(nèi)部函數(shù),只能被其所在文件內(nèi)的函數(shù)調(diào)用,而不能被其他文件內(nèi)的函數(shù)所調(diào)用的函數(shù)稱為內(nèi)
11、部函數(shù)。,格式: static 類型標(biāo)識(shí)符 函數(shù)名 (形參),7.6 內(nèi)部函數(shù)和外部函數(shù),內(nèi)部函數(shù)也稱靜態(tài)函數(shù)。 內(nèi)部函數(shù)不能被其他文件中的函數(shù)使用,所以在不同文件中可以使用相同名字的內(nèi)部函數(shù)。,2、 外部函數(shù),能被其他文件調(diào)用的函數(shù)稱為外部函數(shù)。,格式: extern 類型標(biāo)識(shí)符 函數(shù)名 (形參),7.6 內(nèi)部函數(shù)和外部函數(shù),在C語(yǔ)言中,函數(shù)前如果無(wú)關(guān)鍵字extern,隱含其為外部函數(shù)。 外部函數(shù)只能在所有使用它的文件中定義一次。 外部函數(shù)在調(diào)用它的其他文件中,要用extern加函數(shù)原型加以說(shuō)明,方可使用。,文件file1.cextern int la(int a,int b) ;void
12、main( ) int a,b,c; scanf(%d,%d,文件file2.c int la(int a,int b) return (ab)?a:b; ,例:輸出兩個(gè)整數(shù)中的大數(shù),#include func(int a, int b) static int m=0,i=2; i+=m+1; m=i+a+b; return m; void main( ) int k=4, m=1, p ; p=func(k,m); printf(“p=%dn”,p); p=func(k,m); printf(“p=%dn”,p); ,求程序運(yùn)行結(jié)果,程序運(yùn)行結(jié)果: p=8 p=17,函數(shù)練習(xí)題:,i=3,m=8,i=12,m=17,求程序運(yùn)行結(jié)果,#include int f2(int a,int b) a+; b+; return b; int f1(int x,int y) int n=0,b=0; static int a=0; a=a+x; b=b+y; printf(f1: n=%d,a=%d,b=%dn,n,a,b); return a; void main( ) int n=1,a=2,b=3, i; for(i=0;i2;i+) a=f1(a,b); b=f2(a,b); printf(main
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度知識(shí)產(chǎn)權(quán)贈(zèng)與及許可協(xié)議書范文
- 二零二五年度資料員招聘與知識(shí)產(chǎn)權(quán)保護(hù)與運(yùn)用協(xié)議
- 2025年度電力設(shè)備安裝與檢修服務(wù)合同
- 二零二五年度科研機(jī)構(gòu)實(shí)驗(yàn)室年租房合同
- 二零二五年度廣告公司兼職設(shè)計(jì)師合作協(xié)議
- 2025年度珠寶玉石進(jìn)出口貿(mào)易合同
- 網(wǎng)絡(luò)安全防御策略知識(shí)題庫(kù)
- 探索阿凡提的故事的寓言色彩
- 農(nóng)業(yè)環(huán)境保護(hù)工作要點(diǎn)
- 公司年度運(yùn)營(yíng)計(jì)劃與目標(biāo)分解書
- 2025浙江杭州地鐵運(yùn)營(yíng)分公司校園招聘665人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025四川省小金縣事業(yè)單位招聘362人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2022泛海三江消防ZX900液晶手動(dòng)控制盤使用手冊(cè)
- 廣西壯族自治區(qū)柳州市2025年中考物理模擬考試卷三套附答案
- 第11課《山地回憶》說(shuō)課稿 2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)下冊(cè)
- 羅森運(yùn)營(yíng)部經(jīng)營(yíng)管理手冊(cè)
- 高標(biāo)準(zhǔn)農(nóng)田施工組織設(shè)計(jì)
- 老舊小區(qū)改造項(xiàng)目施工組織設(shè)計(jì)方案
- 【招商手冊(cè)】杭州ICON CENTER 社交娛樂(lè)中心年輕人潮流消費(fèi)創(chuàng)新實(shí)驗(yàn)
- 2025屆高考數(shù)學(xué)二輪復(fù)習(xí)備考策略和方向
- 2025年國(guó)家稅務(wù)總局遼寧省稅務(wù)局系統(tǒng)招聘事業(yè)單位工作人員管理單位筆試遴選500模擬題附帶答案詳解
評(píng)論
0/150
提交評(píng)論