




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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àn)性文件結(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í)行過(guò)程中由new語(yǔ)句為變量申請(qǐng)的。即使指向堆空間的指針變量消失,new語(yǔ)句申請(qǐng)的空間也不會(huì)消失。new語(yǔ)句申請(qǐng)的空間由delete語(yǔ)句釋放。對(duì)應(yīng)于C語(yǔ)言的malloc語(yǔ)句
/*************************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)容無(wú)意義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作用域與可見(jiàn)性作用域一個(gè)標(biāo)識(shí)符在程序正文中有效的區(qū)域。塊作用域(局部作用)類作用域文件作用域可見(jiàn)性從對(duì)標(biāo)識(shí)符引用的角度看變量的有效范圍。12塊作用域在塊({}標(biāo)記的一段程序單元)中聲明的標(biāo)識(shí)符,其作用域自聲明處起,限于塊中,例如:voidfun(inta){ intb; cin>>b; if(b>0) { intc; ...... }}c的作用域b的作用域作用域與可見(jiàn)性13類和文件作用域類作用域作用于特定的成員名,類及其對(duì)象有特殊的訪問(wèn)和作用域規(guī)則。不在前述各個(gè)作用域中出現(xiàn)的聲明,具有文件作用域,這樣聲明的標(biāo)識(shí)符的作用域開(kāi)始于聲明點(diǎn),結(jié)束于文件尾。作用域與可見(jiàn)性程序?qū)嵗?4可見(jiàn)性的概念可見(jiàn)性是從對(duì)標(biāo)識(shí)符的引用的角度來(lái)談的概念??梢?jiàn)性表示從內(nèi)層作用域向外層作用域“看”時(shí)能看見(jiàn)什么。如果標(biāo)識(shí)在某處可見(jiàn),則就可以在該處引用此標(biāo)識(shí)符。塊作用域類作用域文件作用域作用域與可見(jiàn)性15可見(jiàn)性的一般規(guī)則標(biāo)識(shí)符應(yīng)聲明在先,引用在后。在同一作用域中,不能聲明同名的標(biāo)識(shí)符。對(duì)于兩個(gè)嵌套的作用域,如果某個(gè)標(biāo)識(shí)符在外層中聲明,且在內(nèi)層中沒(méi)有同一標(biāo)識(shí)符的聲明,則該標(biāo)識(shí)符在內(nèi)層可見(jiàn)。對(duì)于兩個(gè)嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標(biāo)識(shí)符,則外層作用域的標(biāo)識(shí)符在內(nèi)層不可見(jiàn)。作用域與可見(jiàn)性16例#include<iostream.h>int
i; //文件作用域intmain(){ i
=5; { int
i; //塊作用域
i=7; cout<<"i=“<<i<<endl; //輸出7 } cout<<"i=“<<
i
; //輸出5
return0;}作用域與可見(jiàn)性返回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變量的生存期與可見(jiàn)性全局變量具有靜態(tài)生存期。靜態(tài)局部變量有全局壽命,局部可見(jiàn)。只第一次進(jìn)入函數(shù)時(shí)被初始化。一般局部變量具有動(dòng)態(tài)生存期。每次進(jìn)入函數(shù)時(shí)都初始化。對(duì)象的生存期19數(shù)據(jù)與函數(shù)數(shù)據(jù)存儲(chǔ)在局部對(duì)象中,通過(guò)參數(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ù)庫(kù)中的函數(shù)鏈接在一起,形成可執(zhí)行文件當(dāng)一個(gè)文件中的代碼被修改后,不必對(duì)所有程序重新編譯,從而節(jié)省了程序的編譯時(shí)間使程序更易于維護(hù),給多個(gè)程序員共同編制一個(gè)大型項(xiàng)目提供了方便22模塊模塊的構(gòu)成擴(kuò)展名為.h的頭文件函數(shù)的原型聲明,功能接口的描述全局變量的聲明,加上extern關(guān)鍵字,說(shuō)明這個(gè)變量的內(nèi)存是在其他模塊分配的。宏定義擴(kuò)展名
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)購(gòu)物合同范本
- 2025年新余貨運(yùn)資格證模擬考試新題庫(kù)
- 上海賣房定金合同范本
- 儀器采購(gòu)合同范本模板
- 農(nóng)業(yè)打藥合同范本
- 第五章 第二節(jié) 一 氣溫 世界氣溫的分布教學(xué)設(shè)計(jì)-2024-2025學(xué)年湘教版初中地理七年級(jí)上冊(cè)
- 業(yè)主安裝電梯合同范本
- 全國(guó)物業(yè)服務(wù)合同范本
- 代理經(jīng)銷產(chǎn)品合同范本
- 借款合同范本擔(dān)保人范本
- 肯德基用戶分析報(bào)告
- 福建省龍巖市漳平第一中學(xué)2024屆高三第三次測(cè)評(píng)數(shù)學(xué)試卷含解析
- 2024年長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)匯編
- 蘇科版八年級(jí)下冊(cè)9.3-平行四邊形(第1課時(shí))課件
- PDCA提高臥床患者踝泵運(yùn)動(dòng)的執(zhí)行率
- 電子書(shū) -品牌設(shè)計(jì)法則
- 2021版勞動(dòng)實(shí)踐河北科學(xué)技術(shù)出版社二年級(jí)下冊(cè)超輕黏土創(chuàng)意多教案
- 社區(qū)健康服務(wù)與管理教案
- 《社區(qū)康復(fù)》課件-第一章 總論
- BCP業(yè)務(wù)連續(xù)性管理手冊(cè)
- 浙江省2023年中考語(yǔ)文試題【8套】(含答案)
評(píng)論
0/150
提交評(píng)論