第四講C程序的結(jié)構(gòu)課件_第1頁
第四講C程序的結(jié)構(gòu)課件_第2頁
第四講C程序的結(jié)構(gòu)課件_第3頁
第四講C程序的結(jié)構(gòu)課件_第4頁
第四講C程序的結(jié)構(gòu)課件_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四講C程序的結(jié)構(gòu)本章主要內(nèi)容變量的類型作用域與可見性文件結(jié)構(gòu)與編譯預(yù)處理命令名字空間2/****************************p6_1_p.cpp**主程序****************************/#include<iostream>usingnamespacestd;externvoidp1dispG();externvoidp2dispG();externvoidp2dispg();intG=0,g=0;voidmain(){p1dispG();p2dispG();p2dispg();cout<<"inpG="<<G<<endl;cout<<"inpg="<<g<<endl;}123456789101112131415161718//p6_1_p1.cpp#include<iostream>usingnamespacestd;externintG;voidp1dispG(){G=11;cout<<"inp1G="<<G<<endl;}123456789//p6_1_p2.cpp#include<iostream>usingnamespacestd;externintG;externintg;voidp2dispG(){G=22;cout<<"inp2G="<<G<<endl;}voidp2dispg(){g=222;cout<<"inp2g="<<g<<endl;}123456789101112131415運(yùn)行結(jié)果:inp1G=11inp2G=22inp2g=222inpG=22inpg=222/***********************************6_2.cpp**靜態(tài)局部變量的使用***********************************/#include<iostream>usingnamespacestd;voidfun()

{staticintn;intm=0;n++;m++;cout<<"m=“<<m<<",n=“<<n<<endl;}voidmain(){for(inti=0;i<4;i++)fun();}

12345678910111213141516171819

運(yùn)行結(jié)果:m=1n=1m=1n=2m=1n=3m=1n=4

6.1.2變量的存儲(chǔ)類型

static型變量靜態(tài)局部變量n只是在函數(shù)fun()第一次進(jìn)入時(shí)初始化0,隨后每次進(jìn)入不再賦初值

可執(zhí)行程序的結(jié)構(gòu)代碼區(qū)(textsegment)存放CPU執(zhí)行的機(jī)器指令(machineinstructions)代碼區(qū)是只讀的規(guī)劃了局部變量的相關(guān)信息全局?jǐn)?shù)據(jù)區(qū)/靜態(tài)數(shù)據(jù)區(qū)包含了程序中已初始化的全局變量、已初始化的靜態(tài)變量(全局、局部)常量數(shù)據(jù)(如字符串常量)常變量7進(jìn)程的結(jié)構(gòu)如果將某個(gè)可執(zhí)行文件加載到內(nèi)存運(yùn)行,則將成為一個(gè)進(jìn)程棧區(qū)堆區(qū)已初始化全局變量靜態(tài)變量和常量數(shù)據(jù)數(shù)據(jù)區(qū)可執(zhí)行代碼代碼區(qū)初始化全局變量靜態(tài)變量和常量數(shù)據(jù)可執(zhí)行代碼可執(zhí)行文件結(jié)構(gòu)數(shù)據(jù)區(qū)代碼區(qū)進(jìn)程結(jié)構(gòu)86.1.3變量在內(nèi)存中的存儲(chǔ)

當(dāng)一個(gè)程序準(zhǔn)備運(yùn)行時(shí),操作系統(tǒng)會(huì)為程序分配一塊內(nèi)存空間,C++程序的內(nèi)存通常被分為四個(gè)區(qū): ①全局?jǐn)?shù)據(jù)區(qū)(dataarea) ②代碼區(qū)(codearea) ③棧區(qū)(stackarea) ④堆區(qū)(heaparea)全局變量、靜態(tài)變量、字符串常量、常變量存放在全局?jǐn)?shù)據(jù)區(qū);所有的函數(shù)和代碼存放在代碼區(qū);為運(yùn)行函數(shù)而分配的函數(shù)參數(shù)、局部變量、返回地址存放在棧區(qū);堆區(qū)用于動(dòng)態(tài)內(nèi)存分配。

變量的生存期為從產(chǎn)生到消失的時(shí)期。全局變量、靜態(tài)變量、常變量生存周期為整個(gè)程序的生存周期,因此稱為靜態(tài)生存期;局部變量的生存周期起于函數(shù)調(diào)用,結(jié)束于函數(shù)調(diào)用結(jié)束,其生存期是動(dòng)態(tài)的,因此稱為動(dòng)態(tài)生存期。注意:

堆空間不是系統(tǒng)為程序自動(dòng)分配的,它是程序執(zhí)行過程中由new語句為變量申請(qǐng)的。即使指向堆空間的指針變量消失,new語句申請(qǐng)的空間也不會(huì)消失。new語句申請(qǐng)的空間由delete語句釋放。對(duì)應(yīng)于C語言的malloc語句

/*************************p6_3.cpp*顯示各類變量的內(nèi)存分配************************/#include<iostream>usingnamespacestd;intk=300;constinti=100;#defineN10constintj=200;voidfun(inti=1,intj=2){

intk=3;

staticintl=0;char*p=newchar[N+1];for(intm=0;m<N;m++)p[m]='A'+m;p[m]='\0';cout<<"Adddressofparametervariable:“<<endl;

12345678910111213141516171819

6.1.3變量在內(nèi)存中的存儲(chǔ)

常變量(常量)、全局變量、局部靜態(tài)變量、字符串常量在程序運(yùn)行前在數(shù)據(jù)區(qū)進(jìn)行分配。并且依次按照常變量、全局變量、局部靜態(tài)變量的順序從低地址向高地址分配。常變量按定義的先后次序分配,全局變量、局部變量也一樣。

Adddressofparametervariable:&i=0013FF2C &j=0013FF30Adddressoflocalvariable:&k=0013FF20 &p=0013FF1C &m=0013FF18Adddressofstaticlocalvariable:&l=0047773CAddressofheap:00480410//釋放堆空間前指針的值beforedeletep=ABCDEFGHIJ//釋放堆空間前堆中的內(nèi)容afterdelete:00480410//釋放堆空間后指針的值不變p=葺葺葺葺葺葺葺?//釋放堆空間后,堆中的內(nèi)容無意義voidmain(){L1: fun();L2: cout<<"Adddressofglobalvariable:“<<endl; cout<<"&i=“<<&i<<"\t“<<"&j=“<<&j<<"\t“<<"&k=“<<&k<<endl;cout<<"Addressoffunction:“<<endl; cout<<"&fun=“<<&fun<<"\t“<<"&main“<<&main<<endl;}

Adddressofglobalvariable:&i=0046C01C &j=0046C020 &k=00474DC0Addressoffunction:&fun=004010A0 &main=0040123F6.1.3變量在內(nèi)存中的存儲(chǔ)

6.2作用域與可見性作用域一個(gè)標(biāo)識(shí)符在程序正文中有效的區(qū)域。塊作用域(局部作用)類作用域文件作用域可見性從對(duì)標(biāo)識(shí)符引用的角度看變量的有效范圍。12塊作用域在塊({}標(biāo)記的一段程序單元)中聲明的標(biāo)識(shí)符,其作用域自聲明處起,限于塊中,例如:voidfun(inta){ intb; cin>>b; if(b>0) { intc; ...... }}c的作用域b的作用域作用域與可見性13類和文件作用域類作用域作用于特定的成員名,類及其對(duì)象有特殊的訪問和作用域規(guī)則。不在前述各個(gè)作用域中出現(xiàn)的聲明,具有文件作用域,這樣聲明的標(biāo)識(shí)符的作用域開始于聲明點(diǎn),結(jié)束于文件尾。作用域與可見性程序?qū)嵗?4可見性的概念可見性是從對(duì)標(biāo)識(shí)符的引用的角度來談的概念??梢娦员硎緩膬?nèi)層作用域向外層作用域“看”時(shí)能看見什么。如果標(biāo)識(shí)在某處可見,則就可以在該處引用此標(biāo)識(shí)符。塊作用域類作用域文件作用域作用域與可見性15可見性的一般規(guī)則標(biāo)識(shí)符應(yīng)聲明在先,引用在后。在同一作用域中,不能聲明同名的標(biāo)識(shí)符。對(duì)于兩個(gè)嵌套的作用域,如果某個(gè)標(biāo)識(shí)符在外層中聲明,且在內(nèi)層中沒有同一標(biāo)識(shí)符的聲明,則該標(biāo)識(shí)符在內(nèi)層可見。對(duì)于兩個(gè)嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標(biāo)識(shí)符,則外層作用域的標(biāo)識(shí)符在內(nèi)層不可見。作用域與可見性16例#include<iostream.h>int

i; //文件作用域intmain(){ i

=5; { int

i; //塊作用域

i=7; cout<<"i=“<<i<<endl; //輸出7 } cout<<"i=“<<

i

; //輸出5

return0;}作用域與可見性返回17例2塊作用域?qū)ο蟮纳嫫?include<iostream.h>voidfun();voidmain(){ fun();fun();}voidfun(){ static

inta=1;

inti=5; a++; i++; cout<<"i=“<<i<<",a=“<<a<<endl;}i,a均為塊作用域i是動(dòng)態(tài)生存期a是靜態(tài)生存期運(yùn)行結(jié)果:i=6,a=2i=6,a=3對(duì)象的生存期18變量的生存期與可見性全局變量具有靜態(tài)生存期。靜態(tài)局部變量有全局壽命,局部可見。只第一次進(jìn)入函數(shù)時(shí)被初始化。一般局部變量具有動(dòng)態(tài)生存期。每次進(jìn)入函數(shù)時(shí)都初始化。對(duì)象的生存期19數(shù)據(jù)與函數(shù)數(shù)據(jù)存儲(chǔ)在局部對(duì)象中,通過參數(shù)傳遞實(shí)現(xiàn)共享—函數(shù)間的參數(shù)傳遞。數(shù)據(jù)存儲(chǔ)在全局對(duì)象中。將數(shù)據(jù)和使用數(shù)據(jù)的函數(shù)封裝在類中。20#include<iostream>int

global;voidf(){ global=5;}voidg(){ cout<<global<<endl;}intmain(){ f(); g(); //輸出“5”

return0;}返回例函數(shù)間數(shù)據(jù)共享21模塊化程序設(shè)計(jì)將一個(gè)程序分解成若干模塊,分別放在幾個(gè)源文件中,形成一個(gè)項(xiàng)目(Project)可以對(duì)每個(gè)源文件單獨(dú)進(jìn)行編譯,再將它們的目標(biāo)代碼連同標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)鏈接在一起,形成可執(zhí)行文件當(dāng)一個(gè)文件中的代碼被修改后,不必對(duì)所有程序重新編譯,從而節(jié)省了程序的編譯時(shí)間使程序更易于維護(hù),給多個(gè)程序員共同編制一個(gè)大型項(xiàng)目提供了方便22模塊模塊的構(gòu)成擴(kuò)展名為.h的頭文件函數(shù)的原型聲明,功能接口的描述全局變量的聲明,加上extern關(guān)鍵字,說明這個(gè)變量的內(nèi)存是在其他模塊分配的。宏定義擴(kuò)展名

溫馨提示

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