全局變量及其作用域和生存期函數(shù)的存儲分類學(xué)習(xí)教案_第1頁
全局變量及其作用域和生存期函數(shù)的存儲分類學(xué)習(xí)教案_第2頁
全局變量及其作用域和生存期函數(shù)的存儲分類學(xué)習(xí)教案_第3頁
全局變量及其作用域和生存期函數(shù)的存儲分類學(xué)習(xí)教案_第4頁
全局變量及其作用域和生存期函數(shù)的存儲分類學(xué)習(xí)教案_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、會計學(xué)1全局變量及其作用域和生存期函數(shù)的存全局變量及其作用域和生存期函數(shù)的存儲分類儲分類第一頁,編輯于星期一:十五點 一分。全局變量只有靜態(tài)一種類別,放在靜態(tài)存儲區(qū)。1. 全局變量的作用域和生存期 全局變量是可以在函數(shù)外部任意位置上定義的變量,它的作用域是從定義點到整個源文件結(jié)束。 說明: (1)全局變量為函數(shù)之間的數(shù)據(jù)傳遞提供了一條通道。由于同一文件的所有函數(shù)都能引用全局變量的值,如果在一個函數(shù)中改變了某全局變量的值,就能影響使用該全局變量的其它函數(shù),相當于各個函數(shù)間有了直接傳遞的通道。(2)全局變量的生存期是整個程序的運行期間,即“長期”。(3)若全局變量與某一函數(shù)中的局部變量同名,則在該

2、函數(shù)中,全局變量被屏蔽,使用局部變量。 第1頁/共21頁第二頁,編輯于星期一:十五點 一分。int max,min;float f(int a10) int i,sum=a0; float aver; max=a0; min=a0; for(i=1;imax) max=ai; if(aimin) min=ai); aver=sum/10.0; return aver; main()int x10,j; float average; for(j=0;j10;j+) scanf(%d,&xj); average=f(x);printf(max=%d,min=%d,average=%fn,m

3、ax,min,average); 第2頁/共21頁第三頁,編輯于星期一:十五點 一分。int sum;void fun(void);main()sum=10;printf(*main(1)*:%dn,sum);fun();printf(*main(2)*:%dn,sum);void fun(void)int sum;sum=20;printf(* fun *:%dn,sum);運行結(jié)果為:*main(1)*:10* fun *:20*main(2)*:10 雖然全局變量的作用域大,生存期長,用起來似乎方便靈活,但除十分必要外,一般不提倡使用全局變量。主要有以下原因: 1.長期占用存儲空間。 2

4、.影響了函數(shù)的獨立性,不便于移植。 3.人在讀程序時,難以確定某一時刻的當前值。 全局變量全局變量sum在fun函數(shù)中不起作用。第3頁/共21頁第四頁,編輯于星期一:十五點 一分。 (1) 當全局變量定義在后,引用它的函數(shù)在前時,應(yīng)該在引用它的函數(shù)中用extern對此全局變量進行說明,使其作用域從extern說明處起,延伸到該函數(shù)末尾。也可將extern寫在函數(shù)之外,使其作用域延伸至文件末尾。 (2) 當一個程序由多個文件組成時,每個文件都是一個獨立的編譯單位。如果多個文件中都需要用同一個全局變量,這時若在每個文件中都定義一個同名的全局變量,則單獨編譯各個文件時不會產(chǎn)生錯誤,編譯程序?qū)炊x分

5、別為它們分配存儲空間;但當連接時,將產(chǎn)生同一變量的重復(fù)定義的錯誤。 解決辦法是:在其中一個文件中定義的全局變量,在其它文件中用extern進行說明,說明這些全局變量已在某一編譯單位中定義過,通知編譯程序不必再為它們開辟存儲單元,只是將作用域進一步擴展到本編譯單位中。 第4頁/共21頁第五頁,編輯于星期一:十五點 一分。main( )void gx(),gy(); extern int x,y; gx();gy(); void gx( )int x,y;void gy( ) x,y的原作用域擴展后新增的作用域extern int x,y; main() void gx() int x,y; vo

6、id gy() x,y的作用域擴展后 x,y的作用域書印錯!第5頁/共21頁第六頁,編輯于星期一:十五點 一分。/*file1.c*/int x,y;main( )f1();f2(); f3(); f1( ) x=111; x,y的作用域/*file2.c*/extern int x;f2( ) printf(“%dn”,x); /*111*/ f3( ) x+; printf(“%dn”,x); /*112*/ 擴展后x的作用域第6頁/共21頁第七頁,編輯于星期一:十五點 一分。 當定義全局變量時,若加上static,則稱為靜態(tài)全局變量,其作用域僅限于本編譯單位(本文件)。 /*file1.

7、c*/ static int n;void f();main() f(); /*file2.c*/extern int n;void f() 注意:static對局部變量和全局變量的作用效果不同。對局部變量:作用域沒變,存儲類改為靜態(tài);對全局變量:存儲類沒變,作用域僅限于本文件(小全局)。 n的作用域被限定死第7頁/共21頁第八頁,編輯于星期一:十五點 一分。1 外部函數(shù) 當定義一個函數(shù)時,若在函數(shù)返回值的類型前加上extern(或缺?。r,稱此函數(shù)為“外部”函數(shù)。它可以被同一個程序的其它文件中的函數(shù)調(diào)用。 當函數(shù)調(diào)用語句與被調(diào)函數(shù)不在同一編譯單位(源文件),且函數(shù)的返回值為非整型時,應(yīng)該在調(diào)

8、用語句所在函數(shù)的說明部分用extern對所調(diào)用的函數(shù)進行說明。2 內(nèi)部函數(shù) 當定義一個函數(shù)時,若在函數(shù)返回值的類型前加上static時,稱此函數(shù)為“靜態(tài)”函數(shù)(或“內(nèi)部”函數(shù))。它只能被本編譯單位中的其它函數(shù)所調(diào)用。 使用靜態(tài)函數(shù),可避免不同的編譯單位因為函數(shù)同名而引起的混亂。 第8頁/共21頁第九頁,編輯于星期一:十五點 一分。/* file1.c */main()extern float f(float a,float b); /* 說明f是其它文件(編譯單位)已經(jīng)定義的外部函數(shù) */float x,y,z;z=f(x,y);/* file2.c */extern float f(floa

9、t a,float b) static float f(float a,float b)第9頁/共21頁第十頁,編輯于星期一:十五點 一分。教材教材P128 P128 習(xí)題八習(xí)題八 第一大題:第一大題:1 1、2、3、5、7、8小題;小題;第二大題:第二大題:1 1、2、3、4小題;小題;第10頁/共21頁第十一頁,編輯于星期一:十五點 一分。第11頁/共21頁第十二頁,編輯于星期一:十五點 一分。第12頁/共21頁第十三頁,編輯于星期一:十五點 一分。第13頁/共21頁第十四頁,編輯于星期一:十五點 一分。第14頁/共21頁第十五頁,編輯于星期一:十五點 一分。第15頁/共21頁第十六頁,編輯于星期一:十五點 一分

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論