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

下載本文檔

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

文檔簡介

1、第四講第四講 C+程序的構(gòu)造程序的構(gòu)造C+C+言語程序設(shè)計言語程序設(shè)計本章主要內(nèi)容 變量的類型 作用域與可見性 文件構(gòu)造與編譯預(yù)處置命令 名字空間6.1 變量的作用域變量的作用域 除了按數(shù)據(jù)類型區(qū)分變量外,根據(jù)變量定義的除了按數(shù)據(jù)類型區(qū)分變量外,根據(jù)變量定義的位置,可以把變量分成全局變量與部分變量。全位置,可以把變量分成全局變量與部分變量。全局變量是指定義在函數(shù)體外部的變量,它能被一局變量是指定義在函數(shù)體外部的變量,它能被一切函數(shù)運用。部分變量是指定義在函數(shù)或復(fù)合語切函數(shù)運用。部分變量是指定義在函數(shù)或復(fù)合語句中的變量,只能在函數(shù)或復(fù)合語句中運用。句中的變量,只能在函數(shù)或復(fù)合語句中運用。 int

2、 g=100000;int sum(int x, int y) int sum = 0; for (int i=x; i=y; i+) sum = sum + i; return sum;void main() int x = 1, y = 100; cout sum(x, y) + g endl;12345678910111213g為全局變量sum()中 x、y為部分變量main()中的 x、y為部分變量變量的存儲類型auto存儲類存儲類屬于一時性存儲,其存儲空間可以被假設(shè)屬于一時性存儲,其存儲空間可以被假設(shè)干變量多次覆蓋運用。干變量多次覆蓋運用。register存儲類存儲類存放在通用存放器

3、中。存放在通用存放器中。extern存儲類存儲類在一切函數(shù)和程序段中都可援用。在一切函數(shù)和程序段中都可援用。static存儲類存儲類在內(nèi)存中是以固定地址存放的,在整個程在內(nèi)存中是以固定地址存放的,在整個程序運轉(zhuǎn)期間都有效。序運轉(zhuǎn)期間都有效。/* p6_1_p.cpp * 主程序 */#include using namespace std;extern void p1dispG();extern void p2dispG();extern void p2dispg();int G=0, g=0;void main() p1dispG(); p2dispG(); p2dispg(); couti

4、n p G=Gendl; coutin p g=gendl;123456789101112131415161718 / p6_1_p1.cpp#include using namespace std;extern int G;void p1dispG() G=11; coutin p1 G=Gendl; 123456789/ p6_1_p2.cpp#include using namespace std;extern int G;extern int g;void p2dispG() G=22; coutin p2 G=Gendl;void p2dispg() g=222; coutin p2

5、 g=gendl; 123456789101112131415/* 6_2.cpp * 靜態(tài)部分變量的運用 */#includeusing namespace std;void fun() static int n; int m=0; n+; m+; cout m=“ m , n=“ n endl;void main() for (int i=0; i4; i+) fun(); 12345678910111213141516171819 6.1.2 變量的存儲類型變量的存儲類型 static型變量靜態(tài)部分變量靜態(tài)部分變量n只是在只是在函數(shù)函數(shù)fun()第一次進入時第一次進入時初始化初始化0,隨

6、后每次進,隨后每次進入不再賦初值入不再賦初值 可執(zhí)行程序的構(gòu)造代碼區(qū)text segment存放CPU執(zhí)行的機器指令machine instructions代碼區(qū)是只讀的規(guī)劃了部分變量的相關(guān)信息全局數(shù)據(jù)區(qū)靜態(tài)數(shù)據(jù)區(qū)包含了程序中已初始化的全局變量、已初始化的靜態(tài)變量全局、部分常量數(shù)據(jù)如字符串常量常變量 進程的構(gòu)造假設(shè)將某個可執(zhí)行文件加載到內(nèi)存運轉(zhuǎn),假設(shè)將某個可執(zhí)行文件加載到內(nèi)存運轉(zhuǎn),那么將成為一個進程那么將成為一個進程棧區(qū)堆區(qū)已初始化全局變量靜態(tài)變量和常量數(shù)據(jù)數(shù)據(jù)區(qū)可執(zhí)行代碼代碼區(qū)初始化全局變量靜態(tài)變量和常量數(shù)據(jù)可執(zhí)行代碼可執(zhí)行文件構(gòu)造可執(zhí)行文件構(gòu)造數(shù)據(jù)區(qū)代碼區(qū)進程構(gòu)造進程構(gòu)造6.1.3 變量在

7、內(nèi)存中的存儲變量在內(nèi)存中的存儲 當一個程序預(yù)備運轉(zhuǎn)時,操作系統(tǒng)會為程序分配一塊內(nèi)存空間,當一個程序預(yù)備運轉(zhuǎn)時,操作系統(tǒng)會為程序分配一塊內(nèi)存空間,C+程序程序的內(nèi)存通常被分為四個區(qū):的內(nèi)存通常被分為四個區(qū): 全局數(shù)據(jù)區(qū)全局數(shù)據(jù)區(qū)data area 代碼區(qū)代碼區(qū)code area 棧區(qū)棧區(qū)stack area 堆區(qū)堆區(qū)heap area 全局變量、靜態(tài)變量、字符串常量、常變量存放在全局數(shù)據(jù)區(qū);一切的函全局變量、靜態(tài)變量、字符串常量、常變量存放在全局數(shù)據(jù)區(qū);一切的函數(shù)和代碼存放在代碼區(qū);為運轉(zhuǎn)函數(shù)而分配的函數(shù)參數(shù)、部分變量、前往地址數(shù)和代碼存放在代碼區(qū);為運轉(zhuǎn)函數(shù)而分配的函數(shù)參數(shù)、部分變量、前往地址

8、存放在棧區(qū);堆區(qū)用于動態(tài)內(nèi)存分配。存放在棧區(qū);堆區(qū)用于動態(tài)內(nèi)存分配。 變量的生存期為從產(chǎn)生到消逝的時期。全局變量、靜態(tài)變量、常變量生存變量的生存期為從產(chǎn)生到消逝的時期。全局變量、靜態(tài)變量、常變量生存周期為整個程序的生存周期,因此稱為靜態(tài)生存期;部分變量的生存周期起于周期為整個程序的生存周期,因此稱為靜態(tài)生存期;部分變量的生存周期起于函數(shù)調(diào)用,終了于函數(shù)調(diào)用終了,其生存期是動態(tài)的,因此稱為動態(tài)生存期。函數(shù)調(diào)用,終了于函數(shù)調(diào)用終了,其生存期是動態(tài)的,因此稱為動態(tài)生存期。F留意留意: :F 堆空間不是系統(tǒng)為程序自動分配的,它是程序執(zhí)行過程中由堆空間不是系統(tǒng)為程序自動分配的,它是程序執(zhí)行過程中由new

9、new語語句為變量懇求的。即使指向堆空間的指針變量消逝,句為變量懇求的。即使指向堆空間的指針變量消逝,newnew語句懇求的空間語句懇求的空間也不會消逝。也不會消逝。newnew語句懇求的空間由語句懇求的空間由deletedelete語句釋放。對應(yīng)于語句釋放。對應(yīng)于C C言語的言語的mallocmalloc語句語句 /* p6_3.cpp * 顯示各類變量的內(nèi)存分配*/ #include using namespace std;int k = 300;const int i = 100;#define N 10const int j = 200;void fun( int i=1, int j

10、=2 ) int k=3; static int l = 0; char *p = new charN+1; for (int m = 0; m N; m+) pm = A+m; pm = 0; cout Adddress of parameter variable:“ endl; 12345678910111213141516171819 6.1.3 變量在內(nèi)存中的存儲變量在內(nèi)存中的存儲 常變量常變量(常量常量)、全局變量、部分靜、全局變量、部分靜 態(tài)變量、字符串常量在程序運轉(zhuǎn)前態(tài)變量、字符串常量在程序運轉(zhuǎn)前 在數(shù)據(jù)區(qū)進展分配。并且依次按照在數(shù)據(jù)區(qū)進展分配。并且依次按照 常變量、全局變量、部

11、分靜態(tài)變量常變量、全局變量、部分靜態(tài)變量 的順序從低地址向高地址分配。常的順序從低地址向高地址分配。常 變量按定義的先后次序分配,全局變量按定義的先后次序分配,全局 變量、部分變量也一樣。變量、部分變量也一樣。 Adddress of parameter variable:&i=0013FF2C&j=0013FF30Adddress of local variable:&k=0013FF20&p=0013FF1C&m=0013FF18Adddress of static local variable:&l=0047773CAddress of h

12、eap: 00480410 /釋放堆空間前指針的值before delete p=ABCDEFGHIJ /釋放堆空間前堆中的內(nèi)容after delete: 00480410 /釋放堆空間后指針的值不變p=葺葺葺葺葺葺葺? /釋放堆空間后,堆中的內(nèi)容無意義void main() L1:fun(); L2:cout Adddress of global variable:“ endl;cout &i=“ &i t“ &j=“ &j t“ &k=“ &k endl; cout Address of function:“ endl;cout &f

13、un=“ &fun t“ &main“ &main b;if (b 0)int c;. c的作用域b的作用域類和文件作用域類作用域作用于特定的成員名,類及其類作用域作用于特定的成員名,類及其對象有特殊的訪問和作用域規(guī)那么。對象有特殊的訪問和作用域規(guī)那么。不在前述各個作用域中出現(xiàn)的聲明,具不在前述各個作用域中出現(xiàn)的聲明,具有文件作用域,這樣聲明的標識符的作有文件作用域,這樣聲明的標識符的作用域開場于聲明點,終了于文件尾。用域開場于聲明點,終了于文件尾??梢娦缘母拍?可見性是從對標識符的援用的角度來談的概念??梢娦允菑膶俗R符的援用的角度來談的概念。 可見性表示從內(nèi)層作用域

14、向外層作用域可見性表示從內(nèi)層作用域向外層作用域“看看時能看見什么。時能看見什么。 假設(shè)標識在某處可見,那么就可以在該處援用假設(shè)標識在某處可見,那么就可以在該處援用此標識符。此標識符。塊作用域類作用域文件作用域可見性的普通規(guī)那么標識符應(yīng)聲明在先,援用在后。標識符應(yīng)聲明在先,援用在后。在同一作用域中,不能聲明同名的標識符。在同一作用域中,不能聲明同名的標識符。對于兩個嵌套的作用域,假設(shè)某個標識符對于兩個嵌套的作用域,假設(shè)某個標識符在外層中聲明,且在內(nèi)層中沒有同一標識在外層中聲明,且在內(nèi)層中沒有同一標識符的聲明,那么該標識符在內(nèi)層可見。符的聲明,那么該標識符在內(nèi)層可見。對于兩個嵌套的作用域,假設(shè)在內(nèi)

15、層作用對于兩個嵌套的作用域,假設(shè)在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標識符,域內(nèi)聲明了與外層作用域中同名的標識符,那么外層作用域的標識符在內(nèi)層不可見。那么外層作用域的標識符在內(nèi)層不可見。例#includeint i; /文件作用域int main() i = 5; int i;/塊作用域i = 7;cout i=“ i endl;/輸出7cout i=“ i ;/輸出5return 0;例2 塊作用域?qū)ο蟮纳嫫?includevoid fun();void main() fun(); fun();void fun() static int a = 1;int i =5;a+;i+;cou

16、t i=“ i ,a=“ a endl;i,a均為塊作用域均為塊作用域 i是動態(tài)生存期是動態(tài)生存期 a是靜態(tài)生存期是靜態(tài)生存期運轉(zhuǎn)結(jié)果:運轉(zhuǎn)結(jié)果:i=6, a=2i=6, a=3變量的生存期與可見性全局變量全局變量具有靜態(tài)生存期。具有靜態(tài)生存期。靜態(tài)部分變量靜態(tài)部分變量有全局壽命,部分可見。有全局壽命,部分可見。只第一次進入函數(shù)時被初始化。只第一次進入函數(shù)時被初始化。普通部分變量普通部分變量具有動態(tài)生存期。具有動態(tài)生存期。每次進入函數(shù)時都初始化。每次進入函數(shù)時都初始化。數(shù)據(jù)與函數(shù) 數(shù)據(jù)存儲在部分對象中,經(jīng)過參數(shù)傳數(shù)據(jù)存儲在部分對象中,經(jīng)過參數(shù)傳送實現(xiàn)共享送實現(xiàn)共享函數(shù)間的參數(shù)傳送。函數(shù)間的參數(shù)

17、傳送。 數(shù)據(jù)存儲在全局對象中。數(shù)據(jù)存儲在全局對象中。 將數(shù)據(jù)和運用數(shù)據(jù)的函數(shù)封裝在類中。將數(shù)據(jù)和運用數(shù)據(jù)的函數(shù)封裝在類中。#includeint global;void f()global = 5;void g()cout global endl;int main()f( );g( ); /輸出“5return 0;例 函數(shù)間數(shù)據(jù)共享模塊化程序設(shè)計將一個程序分解成假設(shè)干模塊,分別放在幾個將一個程序分解成假設(shè)干模塊,分別放在幾個源文件中,構(gòu)成一個工程源文件中,構(gòu)成一個工程Project可以對每個源文件單獨進展編譯,再將它們的可以對每個源文件單獨進展編譯,再將它們的目的代碼連同規(guī)范函數(shù)庫中的函數(shù)鏈

18、接在一同,目的代碼連同規(guī)范函數(shù)庫中的函數(shù)鏈接在一同,構(gòu)成可執(zhí)行文件構(gòu)成可執(zhí)行文件 當一個文件中的代碼被修正后,不用對一切程當一個文件中的代碼被修正后,不用對一切程序重新編譯,從而節(jié)省了程序的編譯時間序重新編譯,從而節(jié)省了程序的編譯時間 使程序更易于維護,給多個程序員共同編制一使程序更易于維護,給多個程序員共同編制一個大型工程提供了方便個大型工程提供了方便 模塊模塊的構(gòu)成模塊的構(gòu)成擴展名為擴展名為.h的頭文件的頭文件函數(shù)的原型聲明,功能接口的描畫函數(shù)的原型聲明,功能接口的描畫全局變量的聲明全局變量的聲明, 加上加上extern關(guān)鍵字,闡明這個變量關(guān)鍵字,闡明這個變量的內(nèi)存是在其他模塊分配的。的內(nèi)存是在其他模塊分配的。宏定義宏定義擴展名為擴展名為.cpp的源文件的源文件定義全局變量并進展相應(yīng)的初始化定義全局變量并進展相應(yīng)的初始化定義函數(shù),功能的實現(xiàn)細節(jié)定義函數(shù),功能的實現(xiàn)細節(jié)模塊之間經(jīng)過相互調(diào)用函數(shù)和共享全局變量聯(lián)絡(luò)起模塊之間經(jīng)過相互調(diào)用函數(shù)和共享全局變量聯(lián)絡(luò)起來,頭文件是聯(lián)絡(luò)的紐帶。來,頭文件是聯(lián)絡(luò)的紐帶。模塊全局變量,僅供本模塊的調(diào)用者運用的函數(shù)和模塊全局變量,僅供本模塊的調(diào)用者運用的函數(shù)和全局變量,需求在定義它們時加上全局變量,需求在定義它們時加

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論