




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第6 6章章 變量與函數(shù)變量與函數(shù)思考思考不同函數(shù)中的變量是否可以同名?不同函數(shù)中的變量是否可以同名?同一個變量是否可以在不同函數(shù)中使用?同一個變量是否可以在不同函數(shù)中使用?一個工程下是否可以有多個源文件?一個工程下是否可以有多個源文件?一個文件是否可以使用另外一個文件的變量、函數(shù)?一個文件是否可以使用另外一個文件的變量、函數(shù)?變量的作用域變量的作用域 指在源程序中定義變量的位置及其能被讀寫訪問的范指在源程序中定義變量的位置及其能被讀寫訪問的范圍。圍。按變量作用域變量可分為按變量作用域變量可分為局部變量(局部變量(Local VariableLocal Variable) 全局變量(全局變量
2、(Global Variable Global Variable )局部變量局部變量局部變量局部變量在函數(shù)內(nèi)部或復(fù)合語句塊內(nèi)定義的變量在函數(shù)內(nèi)部或復(fù)合語句塊內(nèi)定義的變量形參也是局部變量形參也是局部變量特點特點定義時不會自動初始化,除非程序員指定初值。定義時不會自動初始化,除非程序員指定初值。進入函數(shù)或語句塊時獲得內(nèi)存,僅能由函數(shù)內(nèi)部或語句進入函數(shù)或語句塊時獲得內(nèi)存,僅能由函數(shù)內(nèi)部或語句塊內(nèi)語句訪問,退出函數(shù)或語句塊時釋放內(nèi)存,不再有塊內(nèi)語句訪問,退出函數(shù)或語句塊時釋放內(nèi)存,不再有效效 。不同函數(shù)各自定義的同名變量互不干擾。不同函數(shù)各自定義的同名變量互不干擾。float f1(int a) in
3、t b,c; .char f2(int x,int y) int i,j; main() int m,n; .a,b,ca,b,c有效有效x,y,i,jx,y,i,j有效有效m,nm,n有效有效運行結(jié)果:運行結(jié)果:5 4 3 2 15 4 3 2 1例例 復(fù)合語句中變量復(fù)合語句中變量#define N 5#define N 5void main()void main() int i; int i; int aN=1,2,3,4,5; int aN=1,2,3,4,5; for(i=0;iN/2;i+) for(i=0;iN/2;i+) int temp;int temp;temp=ai;tem
4、p=ai;ai=aN-i-1;ai=aN-i-1;aN-i-1=temp;aN-i-1=temp; for(i=0;iN;i+) for(i=0;iN;i+) printf(%d ,ai); printf(%d ,ai); 例例 不同函數(shù)中同名變量不同函數(shù)中同名變量void sub()void sub() int a,b;int a,b; a=6; a=6; b=7; b=7; printf(sub:a=%d,b=%dn,a,b); printf(sub:a=%d,b=%dn,a,b); void main()void main() int a,b;int a,b; a=3; a=3; b=4
5、; b=4; printf(main:a=%d,b=%dn,a,b); printf(main:a=%d,b=%dn,a,b); sub(); sub(); printf(main:a=%d,b=%dn,a,b); printf(main:a=%d,b=%dn,a,b); 運行結(jié)果:運行結(jié)果:main:a=3,b=4main:a=3,b=4sub:a=6,b=7sub:a=6,b=7main:a=3,b=4main:a=3,b=4全局變量全局變量全局變量全局變量在所有函數(shù)之外定義的變量。在所有函數(shù)之外定義的變量。特點特點在程序中定義它的位置以后都有效在程序中定義它的位置以后都有效在定義點之前或
6、在其他文件中引用,應(yīng)該進行如下聲明:在定義點之前或在其他文件中引用,應(yīng)該進行如下聲明: extern extern 類型名類型名 變量名變量名; ;從程序運行起即占據(jù)內(nèi)存,程序運行過程中可隨時訪問,從程序運行起即占據(jù)內(nèi)存,程序運行過程中可隨時訪問,程序退出時釋放內(nèi)存程序退出時釋放內(nèi)存 若外部變量與局部變量同名,則外部變量被屏蔽若外部變量與局部變量同名,則外部變量被屏蔽使函數(shù)之間的數(shù)據(jù)聯(lián)系更容易,也更高效使函數(shù)之間的數(shù)據(jù)聯(lián)系更容易,也更高效但是并不推薦使用,盡量少用但是并不推薦使用,盡量少用因為誰都可以改寫全局變量,所以很難確定是誰改寫了它因為誰都可以改寫全局變量,所以很難確定是誰改寫了它flo
7、at max,min;float max,min;float Average(float array, int n);float Average(float array, int n);int main()int main() int i; float ave,score10; int i; float ave,score10; / /* *Input Input * */ / ave= ave=Average(score,10);Average(score,10); printf(max=%6.2fnmin=%6.2fn printf(max=%6.2fnmin=%6.2fn average
8、=%6.2fn, average=%6.2fn,max,min,max,min,ave);ave); return 0; return 0; float Average(float array, int n);float Average(float array, int n); int i; float sum=array0; int i; float sum=array0; max=min=array0; max=min=array0; for(i=1;in;i+) for(i=1;imax) if(arrayimax) max max=arrayi;=arrayi; if(arrayimi
9、n) if(arrayib?a:bc=ab?a:b; ; return( return(c c);); 請寫出運行結(jié)果請寫出運行結(jié)果運行結(jié)果:運行結(jié)果:max=8max=8練習(xí)題練習(xí)題void gx(void);void gx(void);void gy(void);void gy(void);int main()int main() extern int x,y;extern int x,y; printf(“1: x=%dty=%dn”,x,y); printf(“1: x=%dty=%dn”,x,y); y=246; y=246; gx(); gx(); gy(); gy(); retu
10、rn 0; return 0; void gx()void gx() extern int x,y;extern int x,y; x=135; x=135; printf(“2: x=%dty=%dn”,x,y); printf(“2: x=%dty=%dn”,x,y); int x,y;int x,y;void gy()void gy() printf(“3: x=%dty=%dn”,x,y); printf(“3: x=%dty=%dn”,x,y); 例例 用用externextern擴展外部變量作用域擴展外部變量作用域運行結(jié)果:運行結(jié)果:1: x=0 y=01: x=0 y=02: x
11、=135 y=2462: x=135 y=2463: x=135 y=2463: x=135 y=246變量的存儲類型變量的存儲類型 指數(shù)據(jù)在內(nèi)存中存儲的方式指數(shù)據(jù)在內(nèi)存中存儲的方式即編譯器為變量分配內(nèi)存的方式,它決定變量的即編譯器為變量分配內(nèi)存的方式,它決定變量的生存期(變生存期(變量值存在的時間)量值存在的時間)動態(tài)存儲動態(tài)存儲根據(jù)需要臨時分配存儲空間,離開即釋放根據(jù)需要臨時分配存儲空間,離開即釋放靜態(tài)存儲靜態(tài)存儲在程序運行期間分配固定的存儲空間不釋放在程序運行期間分配固定的存儲空間不釋放程序區(qū)程序區(qū)靜態(tài)存儲區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)動態(tài)存儲區(qū)形參、自動變形參、自動變量、函數(shù)調(diào)用量、函數(shù)調(diào)用的
12、現(xiàn)場等的現(xiàn)場等全局變量、全局變量、靜態(tài)變量靜態(tài)變量請注意區(qū)別變量的請注意區(qū)別變量的數(shù)據(jù)類型和變量的數(shù)據(jù)類型和變量的存儲類型!存儲類型! 自動變量自動變量 (auto auto )“自動自動”體現(xiàn)在體現(xiàn)在進入函數(shù)內(nèi)部或復(fù)合語句塊時自動申請內(nèi)存,退出進入函數(shù)內(nèi)部或復(fù)合語句塊時自動申請內(nèi)存,退出時自動釋放內(nèi)存時自動釋放內(nèi)存 標(biāo)準(zhǔn)定義格式標(biāo)準(zhǔn)定義格式 auto 類型名類型名 變量名變量名;動態(tài)局部變量動態(tài)局部變量缺省的存儲類型缺省的存儲類型不初始化時,值是不確定的不初始化時,值是不確定的靜態(tài)變量(靜態(tài)變量(static)一般的內(nèi)部變量一般的內(nèi)部變量在函數(shù)退出后失效,再次進入函數(shù),變量值重新初在函數(shù)退出
13、后失效,再次進入函數(shù),變量值重新初始化始化靜態(tài)變量靜態(tài)變量在變量類型前面用在變量類型前面用staticstatic修飾修飾static int i;static int i;變量的值可以保存到下次進入函數(shù),使函數(shù)具有記變量的值可以保存到下次進入函數(shù),使函數(shù)具有記憶功能憶功能靜態(tài)變量和全局變量都是靜態(tài)存儲類型靜態(tài)變量和全局變量都是靜態(tài)存儲類型自動初始化為自動初始化為0 0從靜態(tài)存儲區(qū)分配,從靜態(tài)存儲區(qū)分配,生存期生存期為整個程序運行期間為整個程序運行期間但作用域不同但作用域不同程序區(qū)程序區(qū)靜態(tài)存儲區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)動態(tài)存儲區(qū)形參、自動變形參、自動變量、函數(shù)調(diào)用量、函數(shù)調(diào)用的現(xiàn)場等的現(xiàn)場等全局
14、變量、全局變量、靜態(tài)變量靜態(tài)變量#include void Func(void);int main()int i;for (i=0; i10; i+)Func(); return 0;/* 函數(shù)功能函數(shù)功能: 打印被調(diào)用的次數(shù)打印被調(diào)用的次數(shù) 函數(shù)入口參數(shù):函數(shù)入口參數(shù): 無無 函數(shù)返回值:函數(shù)返回值: 無無*/void Func(void)int times = 1;/*自動自動變量變量*/printf(Func() was called %d time(s).n, times+);#include void Func(void);int main()int i;for (i=0; i10;
15、 i+)Func(); return 0;/* 函數(shù)功能函數(shù)功能: 打印被調(diào)用的次數(shù)打印被調(diào)用的次數(shù) 函數(shù)入口參數(shù):函數(shù)入口參數(shù): 無無 函數(shù)返回值:函數(shù)返回值: 無無*/void Func(void)static int times = 1;/*靜態(tài)局部變量靜態(tài)局部變量*/printf(Func() was called %d time(s).n, times+);寄存器變量(寄存器變量(register)寄存器寄存器CPUCPU的內(nèi)部容量很有限、但速度極快的存儲器的內(nèi)部容量很有限、但速度極快的存儲器使用頻率比較高的變量聲明為使用頻率比較高的變量聲明為register ,可以使,可以使程序更
16、小、執(zhí)行速度更快程序更小、執(zhí)行速度更快register 類型名類型名 變量名變量名; register int i;現(xiàn)代編譯器有能力自動把普通變量優(yōu)化為寄存器變現(xiàn)代編譯器有能力自動把普通變量優(yōu)化為寄存器變量,并且可以忽略用戶的指定,所以一般無需特別量,并且可以忽略用戶的指定,所以一般無需特別聲明變量為聲明變量為register 變量生存期變量生存期變量在某一時刻存在,則這時屬變量的變量在某一時刻存在,則這時屬變量的“生存期生存期”(從給變量分配內(nèi)存至所分配內(nèi)存被系統(tǒng)收回的時(從給變量分配內(nèi)存至所分配內(nèi)存被系統(tǒng)收回的時間間隔)間間隔)靜態(tài)變量靜態(tài)變量: :從程序開始執(zhí)行到程序結(jié)束從程序開始執(zhí)行到
17、程序結(jié)束動態(tài)變量動態(tài)變量: :從包含該變量定義的函數(shù)開始執(zhí)行至函從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束。數(shù)執(zhí)行結(jié)束。例例 文件文件file1.cint a;main( ) . . f2(); . f1(); .f1( ) auto int b; f2(); .f2( ) static int c; c 作用域作用域b作用域作用域a作用域作用域mainf2f1mainf1f2maina生存期生存期:b生存期生存期:c生存期生存期:引用其它文件中的外部變量引用其它文件中的外部變量int global;int global;int main()int main() int int local;
18、local;. . . . extern int global;extern int global;void func2()void func2() . .在此可以使用在此可以使用file1.cfile1.c中的中的global.global. . file1.cfile1.cfile2.cfile2.c例例 引用其它文件中的變量,輸出引用其它文件中的變量,輸出a a的的m m次方次方/main.c/main.cint a;int a;int power(int n);int power(int n);int main()int main() int d,m; int d,m; printf(Enter the number a and its power:n); printf(Enter the number a and its power:n); scanf(%d,%d,&a,&m); scanf(%d,%d,&a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度按摩院建設(shè)項目施工與監(jiān)理合同
- 纖支鏡止血護理
- 環(huán)境保護教育說課
- 愛國衛(wèi)生健康教育主題班會
- 新版房地產(chǎn)租賃合同模板
- 2024浙江省三門縣職業(yè)中等專業(yè)學(xué)校工作人員招聘考試及答案
- 2024深圳市福田區(qū)華強職業(yè)技術(shù)學(xué)校工作人員招聘考試及答案
- 2024靈臺縣職業(yè)中等專業(yè)學(xué)校工作人員招聘考試及答案
- 職務(wù)職級并行培訓(xùn)
- 物業(yè)各部門管理思路
- 2020年全國1卷-語文真題(解析版)
- DL 5190.3-2019 電力建設(shè)施工技術(shù)規(guī)范 第3部分:汽輪發(fā)電機組
- 關(guān)于學(xué)生假期(寒暑假)安排的調(diào)查問卷
- 北京市海淀區(qū)2023-2024學(xué)年八年級下學(xué)期期末考試英語試題(解析版)
- 重癥醫(yī)學(xué)中級考試記憶總結(jié)
- 成語故事對牛彈琴
- 物流成本管理第四版段春媚課后參考答案
- MOOC 中醫(yī)兒科學(xué)-廣州中醫(yī)藥大學(xué) 中國大學(xué)慕課答案
- 馬拉松賽事運營服務(wù)方案
- 2024年高級軋鋼工技能理論考試題庫(含答案)
- 2023年國家人力資源和社會保障部人事考試中心招聘考試真題及答案
評論
0/150
提交評論