版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 慶國(guó)慶我祖國(guó)演講比賽主持詞
- 學(xué)校食堂衛(wèi)生制度
- 2025年江蘇高中學(xué)業(yè)水平合格性考試物理模擬試卷(含答案解析)
- 質(zhì)量管理體系過程方法和風(fēng)險(xiǎn)思維專業(yè)解讀與應(yīng)用之28:8運(yùn)行-8.5生產(chǎn)和服務(wù)提供-8.5.5交付后活動(dòng)(雷澤佳編制-2024B1)
- 住院總醫(yī)師管理制度
- 薪酬管理制度
- 鋼結(jié)構(gòu)工程專項(xiàng)施工方案
- 互聯(lián)網(wǎng)時(shí)代的創(chuàng)新與發(fā)展培訓(xùn)考核試卷
- 合成材料在電子器材制造中的應(yīng)用考核試卷
- 初等教育的學(xué)校衛(wèi)生與安全考核試卷
- 延髓背外側(cè)綜合征
- 污泥管理臺(tái)賬
- 電商組織架構(gòu)圖參考模板
- 塑料齒輪的工藝設(shè)計(jì)
- 安全設(shè)施設(shè)備定期檢查和維護(hù)保養(yǎng)記錄臺(tái)賬
- 非凡皆自“愚處”起 議論文閱讀專練及答案(2021四川達(dá)州中考試題)
- 金蝶kis專業(yè)版操作手冊(cè)V20
- 房地產(chǎn)估價(jià)公司估價(jià)質(zhì)量管理制度
- 焊接結(jié)構(gòu)外觀質(zhì)量培訓(xùn)ppt課件
- 學(xué)生成績(jī)單模版(中英文合板)
- 細(xì)胞結(jié)構(gòu)與功能
評(píng)論
0/150
提交評(píng)論