版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第14章 變量的存儲(chǔ)類別 及 內(nèi)部、外部函數(shù),一、變量的存儲(chǔ)類型 1、自動(dòng)變量 2、 靜態(tài)變量 3、 寄存器變量 4、 外部變量 二、內(nèi)部函數(shù)和外部函數(shù) 1、 內(nèi)部函數(shù) 2、 外部函數(shù),對(duì)變量的定義需要給出兩方面的屬性:,指變量的名稱、類型、取值范圍和占據(jù)存貯空間的大小。如 整型,實(shí)型,字符型等。,變量存在的時(shí)間(生存期)、作用范圍和在硬件中存放的地點(diǎn)(區(qū)域)。,變量定義的一般形式為:,一、變量的存儲(chǔ)類型,內(nèi)存中供用戶使用的空間有三部分:,存放程序的可執(zhí)行代碼。,存放全局變量和靜態(tài)局部變量。,存放函數(shù)調(diào)用時(shí)調(diào)用函數(shù)的現(xiàn)場(chǎng)保護(hù)、自動(dòng)局部變量和函數(shù)形參。,1、 自動(dòng)變量,用關(guān)鍵字auto作存儲(chǔ)類型
2、說(shuō)明的局部變量(包括形參)稱為自動(dòng)變量。 自動(dòng)變量存放在動(dòng)態(tài)存儲(chǔ)區(qū),都是動(dòng)態(tài)分配存儲(chǔ)空間的。 C語(yǔ)言規(guī)定:在局部變量的定義中,可省略關(guān)鍵字auto。即:沒(méi)有指明存儲(chǔ)類別的變量,一律隱含為:自動(dòng)變量。,例 自動(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,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ù)使用,不能為本源文件以外的其他源文件使用。,靜態(tài)變量舉例,int hanshu( int x ) static int m, 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
4、); main ( ) int a=2 , k ; for ( k=1;k=3;k+) printf(%d)hanshu(%d)=%dn,k, a, hanshu(a); ,程序運(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)示例。 #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;n
5、um+) f (num); ,程序運(yùn)行結(jié)果: NO.1:s=1 NO.2:s=2 NO.3:s=3,靜態(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)局部變量賦初值為空字符。 靜態(tài)局部變量?jī)H能為本函數(shù)使用,其他函數(shù)不能使用和影響它們。,自動(dòng)變量和靜態(tài)局部變量區(qū)別:,自動(dòng)變量的值在函數(shù)調(diào)用結(jié)束后不再保留,下次調(diào)用不能使用已有的值。 靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后,仍然保留上次調(diào)用結(jié)束的值。,
6、在選擇使用靜態(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)變量。,3、寄存器變量(register),寄存器變量:用關(guān)鍵字register作存儲(chǔ)類型說(shuō)明的局部變量。 說(shuō)明: 寄存器變量只能用于基本整型變量、短整型整型變量和字符型變量。 寄存器變量的分配方式是動(dòng)態(tài)分配的。 由于CPU中的通用寄存器數(shù)目有限,通常只把少數(shù)使用頻繁的變量定義為寄存器變量。對(duì)超出寄存器數(shù)目的寄存器變量
7、作一般自動(dòng)變量處理。,例 求n!的函數(shù),int fac(int n) register int i, f=1; /*定義i,f為寄存器變量*/ for ( i=1; i=n; i+) f=f*i; return f; main( ) int k; for ( k=1; k=5; k+) printf( %d!=%dn, k, fac(k) ); ,4、外部變量(extern),外部變量是指在函數(shù)之外定義的變量。外部變量也稱全局變量。它的作用域通常從變量的定義處開始,直到本程序文件的結(jié)束處。外部變量的定義通常放在所有使用它的函數(shù)前面。 利用關(guān)鍵字extern對(duì)外部變量加以聲明時(shí),可以是在一個(gè)源文
8、件內(nèi),也可以在多個(gè)文件組成的程序中。,對(duì)于由多個(gè)源文件組成C程序,C語(yǔ)言規(guī)定:對(duì)共用的外部變量可以在任一源文件中定義一次,其他源文件中用extern對(duì)其聲明后,即可使用。如果希望某些外部變量?jī)H限于本文件使用,則在定義外部變量時(shí)前面加一個(gè)static說(shuō)明。 外部變量的聲明可以有多次,其位置在定義點(diǎn)之前任意處,不需要分配存儲(chǔ)空間。 外部變量的定義只有一次,其位置只能在函數(shù)外,并可對(duì)外部變量分配存儲(chǔ)單元,初始化。,例 外部變量舉例(在同一源文件內(nèi)),int max( int a, int b ) int c ; c=ab?a:b ; return ( c ) ; main( ) extern X,
9、Y ; /* 聲明外部變量*/ printf(%dn, max(X, Y); int X=12, Y=-8; /* 定義外部變量 */,例:外部變量舉例(在兩個(gè)文件中) 求 ab。,文件1:f1.c #include c:userf2.c int X; /*定義外部變量*/ main() int a=4,b=5; X=a; printf(%dn, pow(b); ,文件2:f2.c extern int X; /*聲明外部變量*/ int pow(int n) int i,y=1; for(i=1;i=n;i+) y=y*X; return y; ,二、內(nèi)部函數(shù)和外部函數(shù),1、 內(nèi)部函數(shù),只能
10、被其所在文件內(nèi)的函數(shù)調(diào)用,而不能被其他文件內(nèi)的函數(shù)所調(diào)用的函數(shù)稱為內(nèi)部函數(shù)。,格式: static 類型標(biāo)識(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ù)名 (形參),在C語(yǔ)言中,函數(shù)前如果無(wú)關(guān)鍵字extern,隱含其為外部函數(shù)。 外部函數(shù)只能在所有使用它的文件中定義一次。 外部函數(shù)在調(diào)用它的其他文件中,要用extern加函數(shù)原型加以說(shuō)明,方可使用。,函數(shù)練習(xí)題:,#include func(int a, int b) i
11、nt c; c=a+b; return c; main( ) int x=6, y=7, z=8, r ; r=func(x- -,y+,x+y), z- - ); printf(“r=%dn“,r); ,程序運(yùn)行結(jié)果: r=21,求程序運(yùn)行結(jié)果,func(int a, int b) static int m=0,i=2; i+=m+1; m=i+a+b; return m; 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
12、 p=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; f2(a,b); 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: n=%d,a=%d,b=%dn, n, a, b); ,程序運(yùn)行結(jié)果: f1:
13、n=0, a=2, b=3 main: n=1, a=2, b=4 f1: n=0, a=4, b=4 main: n=1, a=4, b=5,1、編寫一個(gè)計(jì)算字符串長(zhǎng)度的遞歸函數(shù)。 要求:輸入一個(gè)任意長(zhǎng)度的字符串,輸出該串的長(zhǎng)度。,程序清單: #include int i=0; main( ) int stlen( ); char str100; printf(Input string:n); gets(str); strlen(str); printf(The string length=%dn,i); ,int stlen(s) char s ; if(si=0) return(i); else i+; strlen(s+); ,2、輸入A到Z的任意一個(gè)英文字符,輸出回文串。 要求用遞歸函數(shù)實(shí)現(xiàn)。 例:輸入 C 輸出 CBABC 輸
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年翠屏區(qū)敘戎社會(huì)工作服務(wù)中心招聘工作人員大??蛇M(jìn)五險(xiǎn)一金備考題庫(kù)及一套答案詳解
- 2026年黔西市水西中學(xué)招聘各學(xué)科教師備考題庫(kù)及參考答案詳解1套
- 2026年西華大學(xué)美術(shù)與設(shè)計(jì)學(xué)院碩士教師招聘?jìng)淇碱}庫(kù)及答案詳解1套
- 2026年月份編外招聘?jìng)淇碱}庫(kù)及一套答案詳解
- 塔里木大學(xué)2026專任教師公開招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 中學(xué)學(xué)生社團(tuán)活動(dòng)檔案管理制度
- 2026年玉環(huán)市流動(dòng)人口服務(wù)中心招聘流動(dòng)人口專管員備考題庫(kù)及完整答案詳解1套
- 2026年英德市浛洸醫(yī)院(英德市醫(yī)療衛(wèi)生共同體浛洸分院)合同聘用制人員招聘?jìng)淇碱}庫(kù)及1套參考答案詳解
- 中誠(chéng)建川(涼山)電力有限公司公開招聘20名工作人員備考題庫(kù)及答案詳解1套
- 養(yǎng)老院老人康復(fù)設(shè)施維修人員晉升制度
- 醫(yī)院零庫(kù)存管理辦法
- 公司文件存儲(chǔ)管理辦法
- 烏梅丸加味治療潰瘍性結(jié)腸炎(寒熱錯(cuò)雜證)的療效與機(jī)制探究
- 船閘環(huán)保監(jiān)理工作報(bào)告
- 工傷醫(yī)療墊付協(xié)議書
- 原發(fā)性肺癌診療指南2022版
- 《磁控濺射鍍膜》課件
- 天車維修協(xié)議書范本
- 甘蔗砍伐合同協(xié)議
- 2024-2025學(xué)年云南省昆明市盤龍區(qū)六年級(jí)上學(xué)期期末數(shù)學(xué)試卷(含答案)
- 制氫裝置操作技能訓(xùn)練題單選題100道及答案
評(píng)論
0/150
提交評(píng)論