第12章C語言中用戶標識符的作用域和存儲類_第1頁
第12章C語言中用戶標識符的作用域和存儲類_第2頁
第12章C語言中用戶標識符的作用域和存儲類_第3頁
第12章C語言中用戶標識符的作用域和存儲類_第4頁
第12章C語言中用戶標識符的作用域和存儲類_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第12章 C語言中用戶標識符的作用域和存儲類對變量的進一步討論,12.1 局部變量、全局變量和存儲分類 12.2 局部變量及其作用域和生存期 12.3 全局變量及其作用域和生存期 12.4 函數的存儲分類,按類型,整形變量 實型變量 字符變量,按有效范圍 (作用域),局部變量 全局變量,按生存期 (存儲類別),auto變量 static變量,局部變量,1。在一個函數內部定義的變量。,#include float f1(int n) int i,j; . char f2(float x,float y) float z; . main() int a,b,c; . ,i,j的有效范圍,z的有效范

2、圍,a,b,c的有效范圍,2。函數的形式參數。,3。在某個復合語句中定義的變量,n的有效范圍,x,y的有效范圍,#include main() int a,b,c; . int c; . c=a+b; . ,c的有效范圍,復合語句中的變量c和函數體中的c互不影響,在符合語句中的變量都有自己的存儲單元。,全局變量,#include int p=1,q=5; float f1(int a) int b; . int f2(int a) int b; . main() int m,n; . ,全局變量就是指在函數體之外定義的變量。,全局變量的有效范圍是:從定義變量的位置開始到原文件結束。,p,q的有

3、效范圍,auto變量,當在函數內部或復合語句內定義變量時,也可以使用auto說明符進行說明。 用auto說明的變量,當該變量退出它的有效范圍時,系統(tǒng)將自動釋放該變量 所占的存儲單元。,例如: #include double add(double a,double b) auto double s; s=a+b; return s; main() double y,p,q; scanf(“%lf%lf”, ,退出該函數時,局部變量a,b和s都自動釋放,在這里,我們說明了變量s為auto型,所以也會自動釋放。再此,我們也可以把auto省略。,register變量,寄存器變量與auto變量基本上相同

4、,它們之間還是存在一些區(qū)別的:用register 說明的變量建議編譯程序將變量的值保留在CPU的寄存器中,而不是像一般變量 那樣,占內存空間。,例如: #include int power(int,register int); main() int s; s=power(5,3); printf(%dn,s); int power(int x,register int n) register int p; for(p=1;n;n-) p=p*x; return p; ,特點, 使用寄存器變量,程序運行時,訪問存儲器 內的值要比訪問存于內存中的值快得多。 CPU中的寄存器的數目是有限的,因此只能

5、說明 少量的寄存器變量。 register變量無地址。 盡量少用register變量。,static變量,例如: #include float fac(int n) static float f=1; f=f*n; return f; main() int j; for(j=1;j=5;j+) printf(%d!=%.0fn,j,fac(j); ,此條語句是在編譯時進行的并賦初值,此條語句程序不會執(zhí)行它;如果定義局部靜態(tài)變量時沒有賦初值,編譯時會自動賦初值。用static說明的變量,在退出整個程序時,才釋放內存空間。,1!=1 2!=2 3!=6 4!=24 5!=120,如有以下程序 in

6、t a=2; int f(int n) static int a=3; int t=0; if(n%2) static int a=4; t += a+; else static int a=5; t += a+; return t+a+; main() int s=a, i; for( i=0; i3; i+) s+=f(i); printf(%dn, s); 程序運行后的輸出結果是 A)26 B)28 C)29 D)24,extern說明符的作用,當在同一個文件中時使用,#include int p; void f1(int n) int s=1; . main() int a,b,c;

7、. ,的有效范圍,p,#include void f1(int n) int p=1; . int p; main() int a,b,c; . ,的有效范圍,p,局部變量p 的有效范圍,#include void f1(int n) extern int p=1; . int p; main() int a,b,c; . ,全局變量 的有效范圍,p,extern說明符的作用,不同文件中的使用,f1.c原程序文件,f2.c原程序文件,#include int x,y; /*定義全局變量*/ void fun1(); void fun2(); void fun3(); main() fun1()

8、; fun2(); fun3(); void fun1() x=111; . ,#include extern int x; void fun2() printf(%dn,x); . void fun3() x+; printf(%dn,x); . ,在此用extern說明x為全局變量,則意味著在此文件中將會引用f1.c文件中原來變量x中的值。,111 112,靜態(tài)全局變量,不同文件中的使用,f1.c原程序文件,f2.c原程序文件,#include static int n; void func(); main() n=5; printf(file1:%dn,n); func(); ,#include extern int n; void fun

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論