第4章變量的存儲類型_第1頁
第4章變量的存儲類型_第2頁
第4章變量的存儲類型_第3頁
第4章變量的存儲類型_第4頁
第4章變量的存儲類型_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第4章章 變量的存儲類型變量的存儲類型4.1 概述概述4.2 自動型變量自動型變量auto 4.3 寄存器型變量寄存器型變量register 4.4 外部參照型變量外部參照型變量extern4.5 靜態(tài)型變量靜態(tài)型變量static4.6 存儲類型小結(jié)存儲類型小結(jié) 4.1 概述概述 C語言中的變量具有兩種屬性: 根據(jù)變量所持有數(shù)據(jù)的性質(zhì)不同而分為各種數(shù)據(jù)類型 根據(jù)變量的存儲方式不同而分為各種存儲類型. 變量的數(shù)據(jù)類型決定了該變量所占內(nèi)存單元的大小及形式;變量的存儲類型規(guī)定了該變量所在的存儲區(qū)域,因而規(guī)定了該變量作用時間的長短,即壽命的長短,這種性質(zhì)又稱為存在性. 變量在程序中說明的位置決定了該

2、變量的作用域,即在什么范圍內(nèi)可以引用該變量,可引用又稱為可見,所以這種性質(zhì)又稱為可見性.幾個概念:1作用域: 是該變量在其上有定義的程序部分。2變量的生存期: 變量從定義開始到它所占有的存儲空間被系統(tǒng)收回為止的這段時間。3 變量的可見性的含義: 在某個程序區(qū)域,可以對變量進行訪問(或稱存取)操作,則稱該變量在該區(qū)域為可見的,否則為不可見的。再引入幾個概念 :1.全局變量和局部變量 在一個函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量叫內(nèi)部變量,又稱為“局部變量”。在函數(shù)外定義的變量稱為外部變量,又稱為全局變量。2.動態(tài)存儲變量和靜態(tài)存儲變量 在程序運行期間,所有的變量均需占有內(nèi)存,有的是臨時占用內(nèi)存,有的是

3、整個程序運行過程中從頭到尾占用內(nèi)存。對于在程序運行期間根據(jù)需要進行臨時性動態(tài)分配存儲空間的變量稱為“動態(tài)存儲變量”,對于在程序運行期間永久性占用內(nèi)存的變量稱為“靜態(tài)存儲變量. 一個正在運行的程序可將其使用內(nèi)存的情況分為如下三類(如右圖): 程序代碼區(qū): 程序的指令代碼存放在程序代碼區(qū)。 靜態(tài)存儲區(qū): 靜態(tài)存儲變量存放區(qū),包括全局變量。 動態(tài)存儲區(qū): 存放局部自動變量,函數(shù)的形參以及函數(shù)調(diào)用時的現(xiàn)場保護和返回地址等。變量定義的一般形式為: 數(shù)據(jù)類型 變量名表; 存儲類型包括: auto 自動型 register 寄存器型 extern 外部參照型 static 靜態(tài)型 4.2 自動型變量自動型變

4、量auto 1.定義自動變量用關(guān)鍵字auto作存儲類型聲明如(1)void main auto int x, y; auto float z; .在主函數(shù)內(nèi)定義了自動型int變量x,y和自動型float 變量z,在定義自動型變量時auto可缺省。 (2)if (x!=y) int i ; for (i = 0 ; i 10 ; i+) int j ; 在條件判斷后的那個復(fù)合語句中定義了一個自動型int變量i,在for循環(huán)后的那個復(fù)合語句中定義了一個自動型int變量 j 。2. 作用域及壽命: 由于自動型變量只能作內(nèi)部變量,所以自動變量只在定義它的函數(shù)或復(fù)合語句內(nèi)有效,即“局部可見”。 變量的作

5、用域是指該程序中可以使用該變量名字的范圍。對于在函數(shù)開頭聲明的自動變量來說,其作用域是聲明該變量的函數(shù)。不同函數(shù)中聲明的具有相同名字的各個局部變量之間沒有任何關(guān)系。 例4.1 #include void main( ) int x=5; /auto缺省.(1) printf(x=%dt,x); if(x0) int x=10; /(2) printf(x=%dt,x); printf(x=%dn,x+2); 運行結(jié)果: x=5 x=10 x=7例4.2 下面的例子說明了自動變量的特性。 #include void func( ); void func( ) auto int a = 0; pr

6、intf( a of func( ) = %dn,+a); void main( ) int a = 10 ; func( ); / 調(diào)用func( )函數(shù) printf( a of main( ) = %dn,+a); func( ); / 調(diào)用func( )函數(shù) func( ); / 調(diào)用func( )函數(shù) 該程序的輸出結(jié)果為: a of func( )=1 a of main( )=11 a of func( )=1 a of func( )=1例4.3 下面的程序說明自動變量的初始化和作用域程序如下:#includeint n;void show( );void show( ) aut

7、o int i=3; n+; i+; printf(input the value: n=%d i=%dn, n, i); auto int i=10; i+; printf(now the value i=%d n,i); printf(then the value i=%dn,i);void main( ) auto int i; auto int n=1; printf(at first n=%dn,n); for(i=1 ; i3 ; i+) show( ); printf(at last n=%d,n);程序運行結(jié)果: at first n=1 input the value: n=

8、1 i=4 now the value i=11 then the value i=4 input the value: n=2 i=4 now the value i=11 then the value i=4 at last n=14.3 寄存器型變量寄存器型變量register1. 定義在函數(shù)內(nèi)或復(fù)合語句內(nèi)定義,例如:void main( ) register int i; for (i=0 ;i=100 ;i+) 寄存器型變量存儲在CPU的通用寄存器中,因為數(shù)據(jù)在寄存器中操作比在內(nèi)存中快得多,因此通常把程序中使用頻率最高的少數(shù)幾個變量定義為register型,目的是提高運行速度,從而節(jié)

9、省了大量的時間,大大加快了程序的運行速度。2. 分配寄存器的條件是:有空閑的寄存器;變量所表示的數(shù)據(jù)的長度不超過寄存器的位長;3. 作用域和壽命同auto類型,也是在定義它的函數(shù)或復(fù)合語句內(nèi)有效,即局部可見。例4.4 用寄存器變量提高程序執(zhí)行速度。#include/*函數(shù)的形參也可以指定為寄存器變量,一個函數(shù)一般以擁有2個寄存器變量為宜*/ #define T 10000 void delay1( ); void delay2( ); void delay1( ) register unsigned i=0 ; for ( ; iT ; i+) void delay2( ) unsigned

10、i ; for (i=1 ; iT ; i+) void main( ) unsigned int i; printf(a調(diào)用delay1( )第一次延時!n); for ( i=0 ; i60000 ; i+) delay1(); printf(“a第1次延時結(jié)束!n調(diào)用delay2( )第 2次延時!n); for ( i=0 ; i60000 ; i+) delay2(); printf(a第2次延時結(jié)束!n); 該程序運行結(jié)果為;調(diào)用delay1( )第一次延時!第1次延時結(jié)束!調(diào)用delay2( )第2次延時!第2次延時結(jié)束!4.4 外部參照型變量外部參照型變量extern1. 定義

11、: extern型變量一般用于在程序的多個編譯單位之傳送數(shù)據(jù),在這種情況下指定為extern型的變量是其它編譯單位的源程序中定義的,它的存儲空間在靜態(tài)數(shù)據(jù)區(qū),在程序執(zhí)行過程中長期占用空間。要訪問另一個文件中定義的跨文件作用域的全局變量,必須進行extern說明。2. 作用域及壽命: 全局存在,全局可見 例如: /*file1.c*/ /*file2.c*/ /*file3.c*/etern int x; extern int x; int x=0;void main( ) void fun1( ) void fun2( ) x+; x += 3; printf(%d,x); file1.c和f

12、ile2.c中的extern int x; 告訴編譯程序X是外部參照變量,應(yīng)在本文件之外去尋找它的定義。所以上面的x雖在兩個源文件中,但它們是同一個變量。在文件之外的file3.c中,定義了int x=0,即為它們調(diào)用的變量。 例4.5 下例說明了外部變量的特性。#include int n = 100;void hanshu( );void hanshu(void) n-=20 ;int main(void) printf(n=%dn,n); for( ; n=60 ; ) hanshu( ); printf(n=%dn,n); return 0 ;執(zhí)行結(jié)果: n=100 ; n=80 ;

13、n=60 ; n=40 ;例4.6 用extern聲明外部變量:本程序的作用是給定b的值,輸入a和m,求a*b,和a的值。文件file1.c中的內(nèi)容為:#include int a;int m;int power( );void main( ) int b=3,c,d; printf(“input the number a and its power m:n); scanf(%d,%d,&a,&m); c = a*b; printf(%d*%d=%dn,a,b,c); d = power(); printf(%d*%d=%d,a,m,d);文件file2.c中的內(nèi)容為:exte

14、rn int a;extern int m;int power( ); int i,y=1; for ( i=1 ; i=m ; i+) y*=a; return(y);該程序的運行結(jié)果為:input the number a and its power m:5,4 /輸入5*3=15 /輸出5*4=6254.5靜態(tài)型變量靜態(tài)型變量static 1.定義 靜態(tài)型變量既可以在函數(shù)或復(fù)合語句內(nèi)進行,也可以在所有函數(shù)之外進行。在函數(shù)或復(fù)合語句內(nèi)部定義的靜態(tài)變量稱為局部靜態(tài)變量,在函數(shù)外定義的靜態(tài)變量稱為全局靜態(tài)變量。例如:static float x; /*定義x全局靜態(tài)變量*/void main(

15、 ) static int y; /*定義y局部靜態(tài)變量*/ 2.作用域和壽命: static類型變量都是全局壽命。 全局static變量 全局可見。 局部static變量 局部可見。例4.7 考察靜態(tài)變量的值。#include int a = 2;int f( );int f( ) auto int b=0; static int c=3; b+; c+; return(a+b+c) ; void main( ) int i; for(i=0;i3;i+) printf(%dt,f(); 運行結(jié)果為: 7 8 9例4.8 下面的程序說明外部靜態(tài)變量和外部變量的區(qū)別文件file1.c如下:#i

16、ncludestatic float x;float y ;float f2( );float f1( );float f1( ) return(x*x); void main( ) x=500; y=100; printf(f1=%f,f2=%fn, f1( ), f2( ); 文件file2.c如下:extern float y;float f2( ) return(y*y); 輸出 : fl=250000.000000 , f2=10000.000000例4.9 局部靜態(tài)變量與自動變量的區(qū)別。 #includevoid value( );void value( ) int au=0; s

17、tatic int st=0; printf(au_variable=%d, st_variable=%dn,au,st); au+; st+;void main( ) int i; for(i=0;i3;i+) value( ); 程序運行結(jié)果:au_variable=0, st_variable=0au_variable=0, st_variable=1au_variable=0, st_variable=24.6 存儲類型小結(jié)存儲類型小結(jié) 1.關(guān)于類型說明 關(guān)鍵字 auto,static,register用于定義變量的存儲類型說明,其中auto通常缺省。而關(guān)鍵字extern則不然,它不是用于定義變量而是用于說明某個變量,是已在本函數(shù)之外或其它源文件中定義過的外部變量,加extern說明有“延伸外部參照型變量作用域”的作用 。2.關(guān)于變量的作用域和壽命3. 關(guān)于變量的初始化 有關(guān)變量初始化的知識,在前面有關(guān)章節(jié)已講述過,此處只對各種存儲類型變量在初

溫馨提示

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

評論

0/150

提交評論