C程序設(shè)計08-變量的作用域及存儲類別_第1頁
C程序設(shè)計08-變量的作用域及存儲類別_第2頁
C程序設(shè)計08-變量的作用域及存儲類別_第3頁
C程序設(shè)計08-變量的作用域及存儲類別_第4頁
C程序設(shè)計08-變量的作用域及存儲類別_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1頁第八章變量的作用域和存儲類別主要內(nèi)容變量的作用域一同名變量的辨析二變量的存儲類別和生存期三變量作用域和生存期小結(jié)四第2頁第一節(jié)變量的作用域局部變量12本節(jié)主要內(nèi)容全局變量33第3頁變量的作用域:允許使用變量的區(qū)域依照變量作用域的不同,可以把變量分為兩種:變量全局變量局部變量第一節(jié)變量的作用域第4頁局部變量:在大括號內(nèi)定義的變量局部變量的作用域:

局部變量只能在定義它的括號內(nèi)使用,其作用范圍不能向括號外滲透(可以向內(nèi)層括號中滲透)。在函數(shù)體開頭定義的,在本函數(shù)內(nèi)有效在復(fù)合語句中定義的,則只在復(fù)合語句中有效8.1.1

局部變量第5頁8.1.1局部變量intmain()/*指出程序中的錯誤*/{

inta,b;

scanf(“%d%d”,

&a,&b);

{

intc;

c=a+b;

}

printf(“c=%d\n”,

c);

printf(“a=%d,b=%d\n”,

a,b);return0;}錯誤!應(yīng)移入復(fù)合語句內(nèi)移入復(fù)合語句內(nèi),可否?第6頁說明:即便是在主函數(shù)中定義的變量,也不能被其它函數(shù)使用形式參數(shù)也是局部變量(與函數(shù)內(nèi)定義的相同)不同函數(shù)中定義的變量可以同名,但表示的不是同一變量,它們在內(nèi)存中占用不同的單元8.1.1局部變量第7頁8.1.2全局變量m,n的作用域x,y的作用域全局變量:

在函數(shù)外定義的變量,又叫外部變量全局變量的作用域:從定義處到源文件結(jié)束如:intx,y;

/*定義在函數(shù)外*/

intmain()

{……}f1(){……}

intm,n;

/*定義在函數(shù)外*/f2(){……}f3(){……}第8頁8.1.2全局變量全局變量的作用域可以擴展

(1)在本源文件中擴展,如:intx,y;externm;

/*變量聲明,可以不寫類型*/intmain()

{……}f1(){……}

intm,n;

f2(){……}f3(){……}擴展后m的作用域m原本的作用域第9頁8.1.2全局變量全局變量的作用域可以擴展

(2)擴展到其他源文件,如:m的作用域//源文件2externm;

intf4(){……}floatf5(){……}void

f6(){……}//源文件1intx,y;intmain(){……}f1(){……}intm,n;

f2(){……}f3(){……}第10頁8.1.2全局變量全局變量的作用域可以擴展

(3)如果不想讓其他源文件使用,可以在定義時加上static進行限制//源文件2externm;intf3(){……}void

f4(){……}voidf5(){……}//源文件1static

intm;

intmain(){……}voidf1(){……}intf2(){……}//源文件3intm;

floatf6(){……}voidf7(){……}intf8(){……}第11頁8.1.2全局變量全局變量的作用:

給多個函數(shù)提供一個公共場所,便于函數(shù)之間交換數(shù)據(jù)全局變量的適用場合:

有些情況下,主調(diào)函數(shù)需要被調(diào)函數(shù)提供兩個以上的值,如:在若干數(shù)據(jù)中找出最大值和最小值而函數(shù)只能有一個返回值第12頁8.1.2全局變量voidmax_min(intx,inty){inti;for(i=x;i<=x*y;i+=x)if(i%y==0){min=i;break;}max=x*y/min;}#include<stdio.h>intmax,min;voidmax_min(int,int);intmain(){inta,b;scanf(“%d%d”,&a,&b);max_min(a,b);printf(“%d,%d\n”,max,min);return0;}

求兩個數(shù)的最小公倍數(shù)和最大公約數(shù)第13頁8.1.2全局變量全局變量的優(yōu)缺點:

優(yōu)點:一個函數(shù)將值放入全局變量,其他函數(shù)都可以使用,從而增加了函數(shù)間的聯(lián)系缺點:占內(nèi)存時間長函數(shù)之間互相影響,增加了函數(shù)間耦合性

除非必要,一般不用全局變量

問題:全局變量可否作參數(shù)?第14頁第二節(jié)同名變量的辨析局部變量和全局變量同名時的分辨

inta=1,b=2,c=3,d=4;intmain(){inta,b;a=4;/*局部變量*/b=5;

/*局部變量*/c=6;

/*全局變量*/if(a>b){intc;c=a;

/*c是復(fù)合語句級,a是函數(shù)級*/a=b;/*a,b都是函數(shù)級*/b=d;/*b是函數(shù)級,d是全局*/}……}第15頁第三節(jié)變量的存儲類別和生存期內(nèi)存區(qū)域的劃分123本節(jié)主要內(nèi)容3局部變量的種類333全局變量的種類第16頁第三節(jié)變量的存儲類別和生存期內(nèi)存區(qū)域的劃分123本節(jié)主要內(nèi)容3局部變量的種類333全局變量的種類第17頁8.3.1內(nèi)存區(qū)域的劃分堆區(qū)代碼區(qū)非零區(qū)零區(qū)棧區(qū)動態(tài)存儲區(qū)靜態(tài)存儲區(qū)全局變量靜態(tài)局部變量自動變量函數(shù)形參臨時變量第18頁第三節(jié)變量的存儲類別和生存期內(nèi)存區(qū)域的劃分123本節(jié)主要內(nèi)容3局部變量的種類333全局變量的種類第19頁8.3.2局部變量的種類局部變量根據(jù)生存期不同,又分為局部自動變量和局部靜態(tài)變量局部自動變量的數(shù)據(jù)可以存放在內(nèi)存中,也可以存放在寄存器中,存放在寄存器中的稱為寄存器變量局部變量寄存器變量register局部自動變量auto局部靜態(tài)變量static第20頁8.3.2局部變量的種類局部自動變量例:intf(inta,intb)

/*局部自動變量*/{

autointc;

/*auto可省*/

c=a+b;

……}第21頁8.3.2局部變量的種類局部自動變量的特點:動態(tài)存儲:需要時才開辟空間,用完即釋放,若再用,需要重新開辟賦初值次數(shù)與開辟空間次數(shù)相等:若變量定義時賦了初值,則每次開辟空間時都要存入初值若定義變量時無初值,則其值不確定第22頁8.3.2局部變量的種類voidf(){inta=1,b;……}intmain(){f();f();return0;}內(nèi)存1a1a?b?b第23頁8.3.2局部變量的種類局部靜態(tài)變量

voidf(){

staticintn=0;/*局部靜態(tài)變量*/n++;printf(“第%d次調(diào)用\n”,n);……}第24頁8.3.2局部變量的種類voidf(){

staticintn=0;

n++;

printf(“第%d次調(diào)用\n”,n);}intmain(){inti;for(i=1;i<=2;i++)f();return0;}內(nèi)存0n?i12123第1次調(diào)用第2次調(diào)用屏幕輸出:執(zhí)行過程:第25頁8.3.2局部變量的種類局部靜態(tài)變量的特點:靜態(tài)存儲:程序開始時開辟空間,用完不釋放,以備后用,整個程序結(jié)束時再釋放(只開辟一次,也只釋放一次)保留數(shù)據(jù):第一次調(diào)用函數(shù)時留下的數(shù)據(jù),第二次可以繼續(xù)用……若有初值,只賦一次若變量定義時賦了初值,則開辟空間時存入初值,且僅此一次若定義變量時無初值,則系統(tǒng)自動置0模式作用范圍僅限于定義它的括號內(nèi)適用場合:函數(shù)調(diào)用時存的數(shù)據(jù)需要保留到下次調(diào)用第26頁8.3.2局部變量的種類寄存器變量:voidf(inta,intb){

registerinti;/*寄存器變量*/

……}寄存器變量的特點:變量的值存放在系統(tǒng)分配的寄存器中,可減少變量存取時的時間開銷第27頁8.3.2局部變量的種類寄存器變量的適用場合:對運行速度要求高的程序中系統(tǒng)對寄存器變量的限制:只有局部自動變量和形參可定義為寄存器變量寄存器變量的數(shù)目不能太多,若非必要一般不用微機上,編譯器一般將寄存器變量當(dāng)作自動變量處理原因:寄存器數(shù)目有限第28頁第三節(jié)變量的存儲類別和生存期局部變量和全局變量123本節(jié)主要內(nèi)容3局部變量的種類333全局變量的種類第29頁8.3.3全局變量的種類全局變量根據(jù)作用域不同,又分為兩種:

全局變量一般全局變量externstatic型全局變量static存儲類型:都是靜態(tài)存儲,程序運行之前開辟空間,程序結(jié)束才釋放初值:若不賦初值,其值都為0

文件級程序級第30頁8.3.3全局變量的種類一般全局變量(用extern說明或省略)作用域可在本源文件內(nèi)擴展:如:intx,y;intmain(){……}

externm;

f1(){……}

intm,n;

f2(){……}

m原本作用域m現(xiàn)在作用域第31頁8.7.3全局變量的種類一般全局變量(程序級)作用域還可擴展到其它源文件:

intmain()

{……}

intm,n;

f1(){……}

f2(){……}externm,n;voidf1(){……}…………源文件1源文件2m,n作用域第32頁8.7.3全局變量的種類static型全局變量(有些教材稱做靜態(tài)全局變量)作用域只能在本源文件內(nèi)擴展:如:intmain(){……}

externm;

f1(){……}

static

intm,n;

f2(){……}

n的作用域m的作用域第33頁8.7.3全局變量的種類static型全局變量(文件級)作用域只能在本源文件內(nèi)擴展:

externm,n;intmain(){……

……

}

intm,n;voidf1(){……}…………staticintm,n;voidf2(){……}…………源文件3源文件2源文件1第34頁第四節(jié)變量作用域和生存期小結(jié)全局變量存儲類型生存期作用域初值空間分配空間釋放本文件中(變量定義之后)本文件中(變量定義之前)其他源文件中extern(可?。╈o態(tài)main函數(shù)執(zhí)行前main函數(shù)結(jié)束時無條件使用聲明后方可用聲明后方可用若不賦初值其值為0static靜態(tài)main函數(shù)執(zhí)行前main函數(shù)結(jié)束時無條件使用聲明后方可用不可用若不賦初值其值為0局部變量存儲類型生存期作用域初值空間分配空間釋放定義它的大括號內(nèi)定義它的大括號外其他文件或函數(shù)中auto(可省)動態(tài)需要時分配用完即釋放可用

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論