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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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;}錯(cuò)誤!應(yīng)移入復(fù)合語句內(nèi)移入復(fù)合語句內(nèi),可否?第6頁說明:即便是在主函數(shù)中定義的變量,也不能被其它函數(shù)使用形式參數(shù)也是局部變量(與函數(shù)內(nèi)定義的相同)不同函數(shù)中定義的變量可以同名,但表示的不是同一變量,它們?cè)趦?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全局變量全局變量的作用域可以擴(kuò)展

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

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

{……}f1(){……}

intm,n;

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

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

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

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

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

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

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

intm;

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

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

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

有些情況下,主調(diào)函數(shù)需要被調(diào)函數(shù)提供兩個(gè)以上的值,如:在若干數(shù)據(jù)中找出最大值和最小值而函數(shù)只能有一個(gè)返回值第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;}

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

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

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

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

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

/*局部自動(dòng)變量*/{

autointc;

/*auto可省*/

c=a+b;

……}第21頁8.3.2局部變量的種類局部自動(dòng)變量的特點(diǎn):動(dòng)態(tài)存儲(chǔ):需要時(shí)才開辟空間,用完即釋放,若再用,需要重新開辟賦初值次數(shù)與開辟空間次數(shù)相等:若變量定義時(shí)賦了初值,則每次開辟空間時(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)變量的特點(diǎn):靜態(tài)存儲(chǔ):程序開始時(shí)開辟空間,用完不釋放,以備后用,整個(gè)程序結(jié)束時(shí)再釋放(只開辟一次,也只釋放一次)保留數(shù)據(jù):第一次調(diào)用函數(shù)時(shí)留下的數(shù)據(jù),第二次可以繼續(xù)用……若有初值,只賦一次若變量定義時(shí)賦了初值,則開辟空間時(shí)存入初值,且僅此一次若定義變量時(shí)無初值,則系統(tǒng)自動(dòng)置0模式作用范圍僅限于定義它的括號(hào)內(nèi)適用場(chǎng)合:函數(shù)調(diào)用時(shí)存的數(shù)據(jù)需要保留到下次調(diào)用第26頁8.3.2局部變量的種類寄存器變量:voidf(inta,intb){

registerinti;/*寄存器變量*/

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

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

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

externm;

f1(){……}

intm,n;

f2(){……}

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

intmain()

{……}

intm,n;

f1(){……}

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

externm;

f1(){……}

static

intm,n;

f2(){……}

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

externm,n;intmain(){……

……

}

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論