版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
在C++語言中,由用戶命名的標識符都有一個有效的作用域。(標識符:如變量名、函數(shù)名)作用域:即作用范圍,指所定義的標識符在哪一個區(qū)間內(nèi)有效,可以被C++編譯和連接程序所識別。例如在函數(shù)sub()內(nèi)定義的變量,不能在其他函數(shù)中引用;變量的作用域與其在程序中出現(xiàn)的部位有關(guān)。用戶標識符的作用域塊作用域(局部變量)文件作用域(全局變量或稱外部變量)函數(shù)原型作用域函數(shù)作用域類作用域作用域的類型以后介紹塊:用花括號括起來的一部分稱為一個塊。塊作用域:在塊內(nèi)定義的標識符,其有效范圍在塊內(nèi)。局部變量:在塊內(nèi)定義的變量或在一個函數(shù)內(nèi)部定義的變量。塊作用域floatf1(inta)//函數(shù)f1{intb,c; . . .}charf2(intx,inty)//函數(shù)f2{intb,c;inti,j;...}voidmain()//主函數(shù)
{intm,n;...}塊作用域例a,b,c有效
x,y,b,c,i,j有效m,n有效#include<iostream.h>voidmain(){inta,b;cin>>a>>b;if(a>b){intt;t=a;a=b;b=t;} cout<<a<<b;}局部變量例變量a、b的有效范圍在函數(shù)內(nèi)變量t的有效范圍在復(fù)合語句內(nèi)變量a、b、t均具有塊作用域
floatf1(inta)
voidmain(){intb,c;{intm,n;. .. .. .}}charf2(intx,inty){intb,c,d;...}局部變量例形參也為局部變量只在main()函數(shù)中有效不同函數(shù)可使用相同名字的變量全局變量:在函數(shù)外部定義的變量或用extern定義的變量,又被稱為外部變量。有效范圍:從定義變量的位置開始到本源文件結(jié)束。文件作用域:全局變量的有效范圍稱為文件作用域。文件作用域inti=1,j=4;
floatf(inta){intb,c;…}charc1,c2;charg(intx,inty){intk,l;...}main(){intm,n;…}全局變量例i,j,c1,c2均為全局變量但作用范圍不同c1,c2的作用范圍i,j的作用范圍#include<iostream>usingnamespacestd;inti=10;voidmain(){ inti,j=5; i=20;//訪問局部變量i ::i=::i+4;//訪問全局變量i j=::i+i;//訪問全局變量i和局部變量i、j cout<<"::i="<<::i<<endl; cout<<"i="<<i<<endl; cout<<"j="<<j<<endl;}全局變量和局部變量的使用程序運行結(jié)果為:::i=14i=20j=34在塊作用域中可以訪問文件作用域中的變量作用域運算符函數(shù)原型說明:在定義函數(shù)之前調(diào)用函數(shù),必須做函數(shù)原型說明。函數(shù)原型作用域intmain(){inta,b,c,d;
intmin(intx,inty);//或intmin(int,int);
cin>>a>>b>>c;d=min(a,b);d=min(d,c);//函數(shù)調(diào)用
cout<<"min="<<d<<'\n';}intmin(intx,inty)//函數(shù)定義{intz;z=(x<y)?x:y;return(z);}floatmax(intx,inty);floatmax(inta,intb);函數(shù)原型作用域函數(shù)原型說明亦可寫成:
floatmax(int,int);x、y的作用域限于圓括號內(nèi)a、b的作用域限于圓括號內(nèi)對上例,函數(shù)原型說明可寫成:(兩者均可)voidf1(){……{label1:……}gotolabel1;//可以
…….
gotolabel2;//不可以}voidf2(){label2:…..}函數(shù)作用域指在函數(shù)內(nèi)定義的標識符在函數(shù)內(nèi)的任何地方均有效。在C++中,特指語句標號。外部變量可不在文件開頭定義。例:在程序末尾定義全局變量,如果在定義前使用它們,則必須做extern說明。類似于函數(shù)原型說明。即,若自定義函數(shù)在主函數(shù)后面,則調(diào)用它之前必須進行原型說明。外部變量說明externintmax(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){externinta,b;
intm;m=max(a,b);cout<<m<<'\n';}inta=15,b=-8;外部變量說明extern//定義max函數(shù)
//說明外部變量
//定義外部變量注意:外部變量定義兩個不同的概念外部變量說明分配空間,只能一次定義不分配空間,可以多次說明intmax(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){externinta,b;
intm;m=max(a,b);cout<<m<<'\n';}inta=15,b=-8;
外部變量說明extern//定義max函數(shù)
//說明外部變量
//定義外部變量建議:最好放在開頭定義,避免用extern說明。inta=15,b=-8;
intmax(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){intm;m=max(a,b);cout<<m<<'\n';}根據(jù)變量的有效范圍(作用域),將變量分為全局變量和局部變量。根據(jù)變量的存儲特性(生存期),將變量分為靜態(tài)存儲變量和動態(tài)存儲變量。變量的存儲類別存儲空間的分配程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)
程序區(qū)存放可執(zhí)行語句數(shù)據(jù)區(qū)存放數(shù)據(jù)(如變量)的值編譯時確定程序運行期間始終存在與main()函數(shù)的存在期一樣。程序運行時,動態(tài)生成和釋放靜態(tài)變量:存儲在靜態(tài)存儲區(qū)中,編譯時確定空間,在程序的運行過程中始終存在。動態(tài)變量:存儲在動態(tài)存儲區(qū)中,運行時根據(jù)需要動態(tài)分配撤消其空間,在程序運行的一段時間內(nèi)有效。C++的源程序經(jīng)過編譯、連接生成可執(zhí)行文件,在執(zhí)行時被調(diào)入內(nèi)存,此時內(nèi)存分配狀況如下:局部變量和全局變量均要占據(jù)一定的存儲單元,那么它們被分配在靜態(tài)存儲區(qū)中還是被分配在動態(tài)存儲區(qū)中呢?分配在不同的存儲區(qū)中有什么特性呢?變量的存儲類別程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)局部變量全局變量例:intf(inta){autointb,c=3;…...}[auto]intx;局部動態(tài)型(自動變量)
動態(tài)存儲
staticintx;局部靜態(tài)型
靜態(tài)存儲
registerintx;局部動態(tài)型(寄存器變量)動態(tài)存儲局部變量的存儲方式可省略修飾詞動態(tài)變量:進入“塊”時分配空間,退出“塊”時,撤消其空間。變量的空間盡可能分配在寄存器中,存取速度快,多用于循環(huán)變量。對比intfac(intn){staticintf=1;f=f*n;return(f);}voidmain(){inti;for(i=1;i<=5;i++)cout<<fac(i)<<'\n';}intfac(intn){intf=1;f=f*n;return(f);}voidmain(){inti;for(i=1;i<=5;i++)cout<<fac(i)<<'\n';}靜態(tài)變量:編譯時確定空間,初始化一次,離開fac()函數(shù)后,f仍然存在動態(tài)變量:每次進入時,都要分配空間并初始化。離開fac()函數(shù)后,f不存在運行結(jié)果:
12624120運行結(jié)果:
12345賦初值靜態(tài)變量在編譯時確定其初值,只賦值一次。動態(tài)變量賦初值是在進入作用域時進行的,每進入一次賦初值一次。若用戶定義變量時不賦初值,則:對靜態(tài)變量:編譯時自動賦值為0。對動態(tài)變量:是一個不確定的值。關(guān)于初值的說明均為靜態(tài)存儲缺省存儲類別:extern三種使用方式在一個文件中說明全局變量在多個文件中說明全局變量用static說明全局變量全局變量的存儲方式
一個完整的C++程序由多個函數(shù)組成,函數(shù)可以分散在多個源程序文件中。在每個源程序文件中,均可以定義全局變量,文件之間的變量有什么關(guān)系呢?在多個文件中說明全局變量例:
f1.cppf2.cppvoidmain()intf2(){……} {……}
intf1()intf3(){……}{……}只能有一個main()函數(shù)全局變量的跨文件使用例:f1.cpp f2.cppexternintx,y;
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑材料瓷磚購銷合同
- 2024年二手房交易過戶手續(xù)代辦協(xié)議
- 公寓小區(qū)租房合同樣本
- 圖書資料交換協(xié)議
- 債券認購與債權(quán)轉(zhuǎn)讓協(xié)議解讀
- 改良網(wǎng)絡(luò)代理商的合作協(xié)議
- 合作伙伴關(guān)系合同
- 合作合同范例:2024合作合同范本
- 攤鋪機租賃合同樣本
- 2024年離婚后補充協(xié)議書
- 左宗棠生平及評價
- 急性心肌梗死圍手術(shù)期的安全護理
- c90溫控表說明書
- 智能除草機器人
- 宮外孕破裂出血護理查房
- 諾如病毒應(yīng)急演練方案
- 汽車專業(yè)的職業(yè)生涯規(guī)劃書
- DB23T 3676.4-2023 室內(nèi)運動冰場制冰要求 第4部分 冰盤
- 農(nóng)耕研學(xué)基地可行性方案
- 食堂員工安全知識培訓(xùn)
- PCN、ECN變更管理流程
評論
0/150
提交評論