C課件第11講.ppt_第1頁(yè)
C課件第11講.ppt_第2頁(yè)
C課件第11講.ppt_第3頁(yè)
C課件第11講.ppt_第4頁(yè)
C課件第11講.ppt_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論