版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1頁(yè)第八章變量的作用域和存儲(chǔ)類(lèi)別主要內(nèi)容變量的作用域一同名變量的辨析二變量的存儲(chǔ)類(lèi)別和生存期三變量作用域和生存期小結(jié)四第2頁(yè)第一節(jié)變量的作用域局部變量12本節(jié)主要內(nèi)容全局變量33第3頁(yè)變量的作用域:允許使用變量的區(qū)域依照變量作用域的不同,可以把變量分為兩種:變量全局變量局部變量第一節(jié)變量的作用域第4頁(yè)局部變量:在大括號(hào)內(nèi)定義的變量局部變量的作用域:
局部變量只能在定義它的括號(hào)內(nèi)使用,其作用范圍不能向括號(hào)外滲透(可以向內(nèi)層括號(hào)中滲透)。在函數(shù)體開(kāi)頭定義的,在本函數(shù)內(nèi)有效在復(fù)合語(yǔ)句中定義的,則只在復(fù)合語(yǔ)句中有效8.1.1
局部變量第5頁(yè)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ù)合語(yǔ)句內(nèi)移入復(fù)合語(yǔ)句內(nèi),可否?第6頁(yè)說(shuō)明:即便是在主函數(shù)中定義的變量,也不能被其它函數(shù)使用形式參數(shù)也是局部變量(與函數(shù)內(nèi)定義的相同)不同函數(shù)中定義的變量可以同名,但表示的不是同一變量,它們?cè)趦?nèi)存中占用不同的單元8.1.1局部變量第7頁(yè)8.1.2全局變量m,n的作用域x,y的作用域全局變量:
在函數(shù)外定義的變量,又叫外部變量全局變量的作用域:從定義處到源文件結(jié)束如:intx,y;
/*定義在函數(shù)外*/
intmain()
{……}f1(){……}
intm,n;
/*定義在函數(shù)外*/f2(){……}f3(){……}第8頁(yè)8.1.2全局變量全局變量的作用域可以擴(kuò)展
(1)在本源文件中擴(kuò)展,如:intx,y;externm;
/*變量聲明,可以不寫(xiě)類(lèi)型*/intmain()
{……}f1(){……}
intm,n;
f2(){……}f3(){……}擴(kuò)展后m的作用域m原本的作用域第9頁(yè)8.1.2全局變量全局變量的作用域可以擴(kuò)展
(2)擴(kuò)展到其他源文件,如:m的作用域//源文件2externm;
intf4(){……}floatf5(){……}void
f6(){……}//源文件1intx,y;intmain(){……}f1(){……}intm,n;
f2(){……}f3(){……}第10頁(yè)8.1.2全局變量全局變量的作用域可以擴(kuò)展
(3)如果不想讓其他源文件使用,可以在定義時(shí)加上static進(jìn)行限制//源文件2externm;intf3(){……}void
f4(){……}voidf5(){……}//源文件1static
intm;
intmain(){……}voidf1(){……}intf2(){……}//源文件3intm;
floatf6(){……}voidf7(){……}intf8(){……}第11頁(yè)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頁(yè)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頁(yè)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ù)間耦合性
除非必要,一般不用全局變量
問(wèn)題:全局變量可否作參數(shù)?第14頁(yè)第二節(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ù)合語(yǔ)句級(jí),a是函數(shù)級(jí)*/a=b;/*a,b都是函數(shù)級(jí)*/b=d;/*b是函數(shù)級(jí),d是全局*/}……}第15頁(yè)第三節(jié)變量的存儲(chǔ)類(lèi)別和生存期內(nèi)存區(qū)域的劃分123本節(jié)主要內(nèi)容3局部變量的種類(lèi)333全局變量的種類(lèi)第16頁(yè)第三節(jié)變量的存儲(chǔ)類(lèi)別和生存期內(nèi)存區(qū)域的劃分123本節(jié)主要內(nèi)容3局部變量的種類(lèi)333全局變量的種類(lèi)第17頁(yè)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頁(yè)第三節(jié)變量的存儲(chǔ)類(lèi)別和生存期內(nèi)存區(qū)域的劃分123本節(jié)主要內(nèi)容3局部變量的種類(lèi)333全局變量的種類(lèi)第19頁(yè)8.3.2局部變量的種類(lèi)局部變量根據(jù)生存期不同,又分為局部自動(dòng)變量和局部靜態(tài)變量局部自動(dòng)變量的數(shù)據(jù)可以存放在內(nèi)存中,也可以存放在寄存器中,存放在寄存器中的稱(chēng)為寄存器變量局部變量寄存器變量register局部自動(dòng)變量auto局部靜態(tài)變量static第20頁(yè)8.3.2局部變量的種類(lèi)局部自動(dòng)變量例:intf(inta,intb)
/*局部自動(dòng)變量*/{
autointc;
/*auto可省*/
c=a+b;
……}第21頁(yè)8.3.2局部變量的種類(lèi)局部自動(dòng)變量的特點(diǎn):動(dòng)態(tài)存儲(chǔ):需要時(shí)才開(kāi)辟空間,用完即釋放,若再用,需要重新開(kāi)辟賦初值次數(shù)與開(kāi)辟空間次數(shù)相等:若變量定義時(shí)賦了初值,則每次開(kāi)辟空間時(shí)都要存入初值若定義變量時(shí)無(wú)初值,則其值不確定第22頁(yè)8.3.2局部變量的種類(lèi)voidf(){inta=1,b;……}intmain(){f();f();return0;}內(nèi)存1a1a?b?b第23頁(yè)8.3.2局部變量的種類(lèi)局部靜態(tài)變量
voidf(){
staticintn=0;/*局部靜態(tài)變量*/n++;printf(“第%d次調(diào)用\n”,n);……}第24頁(yè)8.3.2局部變量的種類(lèi)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í)行過(guò)程:第25頁(yè)8.3.2局部變量的種類(lèi)局部靜態(tài)變量的特點(diǎn):靜態(tài)存儲(chǔ):程序開(kāi)始時(shí)開(kāi)辟空間,用完不釋放,以備后用,整個(gè)程序結(jié)束時(shí)再釋放(只開(kāi)辟一次,也只釋放一次)保留數(shù)據(jù):第一次調(diào)用函數(shù)時(shí)留下的數(shù)據(jù),第二次可以繼續(xù)用……若有初值,只賦一次若變量定義時(shí)賦了初值,則開(kāi)辟空間時(shí)存入初值,且僅此一次若定義變量時(shí)無(wú)初值,則系統(tǒng)自動(dòng)置0模式作用范圍僅限于定義它的括號(hào)內(nèi)適用場(chǎng)合:函數(shù)調(diào)用時(shí)存的數(shù)據(jù)需要保留到下次調(diào)用第26頁(yè)8.3.2局部變量的種類(lèi)寄存器變量:voidf(inta,intb){
registerinti;/*寄存器變量*/
……}寄存器變量的特點(diǎn):變量的值存放在系統(tǒng)分配的寄存器中,可減少變量存取時(shí)的時(shí)間開(kāi)銷(xiāo)第27頁(yè)8.3.2局部變量的種類(lèi)寄存器變量的適用場(chǎng)合:對(duì)運(yùn)行速度要求高的程序中系統(tǒng)對(duì)寄存器變量的限制:只有局部自動(dòng)變量和形參可定義為寄存器變量寄存器變量的數(shù)目不能太多,若非必要一般不用微機(jī)上,編譯器一般將寄存器變量當(dāng)作自動(dòng)變量處理原因:寄存器數(shù)目有限第28頁(yè)第三節(jié)變量的存儲(chǔ)類(lèi)別和生存期局部變量和全局變量123本節(jié)主要內(nèi)容3局部變量的種類(lèi)333全局變量的種類(lèi)第29頁(yè)8.3.3全局變量的種類(lèi)全局變量根據(jù)作用域不同,又分為兩種:
全局變量一般全局變量externstatic型全局變量static存儲(chǔ)類(lèi)型:都是靜態(tài)存儲(chǔ),程序運(yùn)行之前開(kāi)辟空間,程序結(jié)束才釋放初值:若不賦初值,其值都為0
文件級(jí)程序級(jí)第30頁(yè)8.3.3全局變量的種類(lèi)一般全局變量(用extern說(shuō)明或省略)作用域可在本源文件內(nèi)擴(kuò)展:如:intx,y;intmain(){……}
externm;
f1(){……}
intm,n;
f2(){……}
m原本作用域m現(xiàn)在作用域第31頁(yè)8.7.3全局變量的種類(lèi)一般全局變量(程序級(jí))作用域還可擴(kuò)展到其它源文件:
intmain()
{……}
intm,n;
f1(){……}
f2(){……}externm,n;voidf1(){……}…………源文件1源文件2m,n作用域第32頁(yè)8.7.3全局變量的種類(lèi)static型全局變量(有些教材稱(chēng)做靜態(tài)全局變量)作用域只能在本源文件內(nèi)擴(kuò)展:如:intmain(){……}
externm;
f1(){……}
static
intm,n;
f2(){……}
n的作用域m的作用域第33頁(yè)8.7.3全局變量的種類(lèi)static型全局變量(文件級(jí))作用域只能在本源文件內(nèi)擴(kuò)展:
externm,n;intmain(){……
……
}
intm,n;voidf1(){……}…………staticintm,n;voidf2(){……}…………源文件3源文件2源文件1第34頁(yè)第四節(jié)變量作用域和生存期小結(jié)全局變量存儲(chǔ)類(lèi)型生存期作用域初值空間分配空間釋放本文件中(變量定義之后)本文件中(變量定義之前)其他源文件中extern(可省)靜態(tài)main函數(shù)執(zhí)行前main函數(shù)結(jié)束時(shí)無(wú)條件使用聲明后方可用聲明后方可用若不賦初值其值為0static靜態(tài)main函數(shù)執(zhí)行前main函數(shù)結(jié)束時(shí)無(wú)條件使用聲明后方可用不可用若不賦初值其值為0局部變量存儲(chǔ)類(lèi)型生存期作用域初值空間分配空間釋放定義它的大括號(hào)內(nèi)定義它的大括號(hào)外其他文件或函數(shù)中auto(可省)動(dòng)態(tài)需要時(shí)分配用完即釋放可用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度工傷事故賠償調(diào)查與分析合同3篇
- 2025年度水電工程 施工進(jìn)度與質(zhì)量控制合同3篇
- 2024年中國(guó)電動(dòng)抽油機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 2025年度出納人員培訓(xùn)及考核合同
- 2024年中國(guó)爽滑撈面市場(chǎng)調(diào)查研究報(bào)告
- 2025年度消防工程設(shè)計(jì)合同文本下載3篇
- 2025年度物流安全事故處理與賠償協(xié)議3篇
- 2025年度消防器材銷(xiāo)售及售后服務(wù)合同樣本5篇
- 《含CO2和H2O石油介質(zhì)對(duì)GFRP管材的滲透與腐蝕行為研究》
- 2024至2030年標(biāo)準(zhǔn)模塊式電源電涌保護(hù)器項(xiàng)目投資價(jià)值分析報(bào)告
- 《鴻蒙智能互聯(lián)設(shè)備開(kāi)發(fā)(微課版)》全套教學(xué)課件
- 山西省晉中市2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 裝卸工安全培訓(xùn)課件
- 中成藥學(xué)完整版本
- 安全與急救學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024-2025學(xué)年度廣東省春季高考英語(yǔ)模擬試卷(解析版) - 副本
- 2024電力安全工器具及小型施工機(jī)具預(yù)防性試驗(yàn)規(guī)程
- 基于單片機(jī)的2.4G無(wú)線通信系統(tǒng)
- 《建筑力學(xué)》期末機(jī)考資料
- 廣東省廣州市2023-2024學(xué)年三年級(jí)上學(xué)期英語(yǔ)期中試卷(含答案)
- DB11T 1282-2022 數(shù)據(jù)中心節(jié)能設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論