C++函數(shù)-作用域與存儲(chǔ)類別_第1頁
C++函數(shù)-作用域與存儲(chǔ)類別_第2頁
C++函數(shù)-作用域與存儲(chǔ)類別_第3頁
C++函數(shù)-作用域與存儲(chǔ)類別_第4頁
C++函數(shù)-作用域與存儲(chǔ)類別_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

在C++語言中,由用戶命名的標(biāo)識(shí)符都有一個(gè)有效的作用域。(標(biāo)識(shí)符:如變量名、函數(shù)名)作用域:即作用范圍,指所定義的標(biāo)識(shí)符在哪一個(gè)區(qū)間內(nèi)有效,可以被C++編譯和連接程序所識(shí)別。例如在函數(shù)sub()內(nèi)定義的變量,不能在其他函數(shù)中引用;變量的作用域與其在程序中出現(xiàn)的部位有關(guān)。用戶標(biāo)識(shí)符的作用域塊作用域(局部變量)文件作用域(全局變量或稱外部變量)函數(shù)原型作用域函數(shù)作用域類作用域作用域的類型以后介紹塊:用花括號(hào)括起來的一部分稱為一個(gè)塊。塊作用域:在塊內(nèi)定義的標(biāo)識(shí)符,其有效范圍在塊內(nèi)。局部變量:在塊內(nèi)定義的變量或在一個(gè)函數(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;}全局變量和局部變量的使用程序運(yùn)行結(jié)果為:::i=14i=20j=34在塊作用域中可以訪問文件作用域中的變量作用域運(yùn)算符函數(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的作用域限于圓括號(hào)內(nèi)a、b的作用域限于圓括號(hào)內(nèi)對(duì)上例,函數(shù)原型說明可寫成:(兩者均可)voidf1(){……{label1:……}gotolabel1;//可以

…….

gotolabel2;//不可以}voidf2(){label2:…..}函數(shù)作用域指在函數(shù)內(nèi)定義的標(biāo)識(shí)符在函數(shù)內(nèi)的任何地方均有效。在C++中,特指語句標(biāo)號(hào)。外部變量可不在文件開頭定義。例:在程序末尾定義全局變量,如果在定義前使用它們,則必須做extern說明。類似于函數(shù)原型說明。即,若自定義函數(shù)在主函數(shù)后面,則調(diào)用它之前必須進(jìn)行原型說明。外部變量說明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ù)

//說明外部變量

//定義外部變量注意:外部變量定義兩個(gè)不同的概念外部變量說明分配空間,只能一次定義不分配空間,可以多次說明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ù)變量的存儲(chǔ)特性(生存期),將變量分為靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量。變量的存儲(chǔ)類別存儲(chǔ)空間的分配程序區(qū)靜態(tài)存儲(chǔ)區(qū)動(dòng)態(tài)存儲(chǔ)區(qū)

程序區(qū)存放可執(zhí)行語句數(shù)據(jù)區(qū)存放數(shù)據(jù)(如變量)的值編譯時(shí)確定程序運(yùn)行期間始終存在與main()函數(shù)的存在期一樣。程序運(yùn)行時(shí),動(dòng)態(tài)生成和釋放靜態(tài)變量:存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)中,編譯時(shí)確定空間,在程序的運(yùn)行過程中始終存在。動(dòng)態(tài)變量:存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中,運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)分配撤消其空間,在程序運(yùn)行的一段時(shí)間內(nèi)有效。C++的源程序經(jīng)過編譯、連接生成可執(zhí)行文件,在執(zhí)行時(shí)被調(diào)入內(nèi)存,此時(shí)內(nèi)存分配狀況如下:局部變量和全局變量均要占據(jù)一定的存儲(chǔ)單元,那么它們被分配在靜態(tài)存儲(chǔ)區(qū)中還是被分配在動(dòng)態(tài)存儲(chǔ)區(qū)中呢?分配在不同的存儲(chǔ)區(qū)中有什么特性呢?變量的存儲(chǔ)類別程序區(qū)靜態(tài)存儲(chǔ)區(qū)動(dòng)態(tài)存儲(chǔ)區(qū)局部變量全局變量例:intf(inta){autointb,c=3;…...}[auto]intx;局部動(dòng)態(tài)型(自動(dòng)變量)

動(dòng)態(tài)存儲(chǔ)

staticintx;局部靜態(tài)型

靜態(tài)存儲(chǔ)

registerintx;局部動(dòng)態(tài)型(寄存器變量)動(dòng)態(tài)存儲(chǔ)局部變量的存儲(chǔ)方式可省略修飾詞動(dòng)態(tài)變量:進(jìn)入“塊”時(shí)分配空間,退出“塊”時(shí),撤消其空間。變量的空間盡可能分配在寄存器中,存取速度快,多用于循環(huán)變量。對(duì)比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)變量:編譯時(shí)確定空間,初始化一次,離開fac()函數(shù)后,f仍然存在動(dòng)態(tài)變量:每次進(jìn)入時(shí),都要分配空間并初始化。離開fac()函數(shù)后,f不存在運(yùn)行結(jié)果:

12624120運(yùn)行結(jié)果:

12345賦初值靜態(tài)變量在編譯時(shí)確定其初值,只賦值一次。動(dòng)態(tài)變量賦初值是在進(jìn)入作用域時(shí)進(jìn)行的,每進(jìn)入一次賦初值一次。若用戶定義變量時(shí)不賦初值,則:對(duì)靜態(tài)變量:編譯時(shí)自動(dòng)賦值為0。對(duì)動(dòng)態(tài)變量:是一個(gè)不確定的值。關(guān)于初值的說明均為靜態(tài)存儲(chǔ)缺省存儲(chǔ)類別:extern三種使用方式在一個(gè)文件中說明全局變量在多個(gè)文件中說明全局變量用static說明全局變量全局變量的存儲(chǔ)方式

一個(gè)完整的C++程序由多個(gè)函數(shù)組成,函數(shù)可以分散在多個(gè)源程序文件中。在每個(gè)源程序文件中,均可以定義全局變量,文件之間的變量有什么關(guān)系呢?在多個(gè)文件中說明全局變量例:

f1.cppf2.cppvoidmain()intf2(){……} {……}

intf1()intf3(){……}{……}只能有一個(gè)main()函數(shù)全局變量的跨文件使用例:f1.cpp f2.cppexternintx,y;

溫馨提示

  • 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)論