清華教程第四講程序結(jié)構(gòu)_第1頁(yè)
清華教程第四講程序結(jié)構(gòu)_第2頁(yè)
清華教程第四講程序結(jié)構(gòu)_第3頁(yè)
清華教程第四講程序結(jié)構(gòu)_第4頁(yè)
清華教程第四講程序結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四講 程序結(jié)構(gòu)變量?jī)?nèi)部函數(shù)與外部函數(shù)編譯預(yù)處理變量從變量的作用域可以分為局部變量和全局變量;從變量的存儲(chǔ)形式可以分為動(dòng)態(tài)存儲(chǔ)變量和靜態(tài)存儲(chǔ)變量。局部變量全局變量動(dòng)態(tài)存儲(chǔ)變量靜態(tài)存儲(chǔ)變量局部變量局部變量也稱內(nèi)部變量,它是在函數(shù)內(nèi)部定義的,只在該函數(shù)內(nèi)部有效(包括main函數(shù))。在該函數(shù)以外不能使用。這就使得不同函數(shù)之間可以使用相同的變量名,它們代表不同的對(duì)象,互不干擾。當(dāng)局部變量在復(fù)合語(yǔ)句中定義時(shí),該變量只在該復(fù)合語(yǔ)句中有效。例如:if(ab)int i;i=a;變量i只在復(fù)合語(yǔ)句中有效。區(qū)別:for(int i=0;i10;i+)變量i在for語(yǔ)句之后有效。全局變量一個(gè)源文件可以包含若干個(gè)函

2、數(shù),全局變量是在源文件中而在函數(shù)之外定義的,也叫外部變量。全局變量可以為本文件中其它函數(shù)所共用,它的作用范圍是從變量定義的位置開(kāi)始到源文件結(jié)束。下面以三個(gè)例子說(shuō)明外部變量的使用。 #include int f1(int x);int c1=30;int c2=40; main()int x=0;c2+;x=f1(x)+c1+c2;coutx=xendl;return 0;int p1=1;int p2=2;int f1(int x)int z;c1+;z=x+p1+p2+c1+c2;return z;例(1)外部變量增加了函數(shù)間聯(lián)系的渠道,如果一個(gè)函數(shù)改變了全局變量的值就能直接影響到其它函數(shù)。

3、#include int max(int x,int y);main()extern int a,b;coutmax(a,b)=“max(a,b)y? x:y;return z; 如果在外部變量定義之前的某個(gè)函數(shù)相引用外部變量,應(yīng)函數(shù)體內(nèi)加以說(shuō)明。例(2)例(3)#include int i=100;int max(int x,int y);main()couti=i0)int i=0;couti=iendl;couti=iendl;return 0; 如果在同一源文件中,外部變量與局部變量同名,則在局部變量的作用域內(nèi),外部變量被局部變量所屏蔽。建議不在必要時(shí)不要使用全局變量,因?yàn)槿肿兞吭诔?/p>

4、序的整個(gè)執(zhí)行過(guò)程中都占用內(nèi)存空間,而且使程序的通用性和可移植性降低。全局變量過(guò)多還會(huì)降低程序的清晰性。 動(dòng)態(tài)存儲(chǔ)變量動(dòng)態(tài)存儲(chǔ)方式是在程序運(yùn)行期間根據(jù)程序運(yùn)行的需要?jiǎng)討B(tài)的分配存儲(chǔ)空間的方式。(1)函數(shù)形參變量。(2)未加static說(shuō)明的局部變量。其關(guān)鍵字是auto,經(jīng)常省略。(3)函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址等。這些變量在程序執(zhí)行期間動(dòng)態(tài)地分配存儲(chǔ)空間。 動(dòng)態(tài)存儲(chǔ)區(qū)中存儲(chǔ)的數(shù)據(jù)有靜態(tài)存儲(chǔ)變量靜態(tài)存儲(chǔ)方式是在程序執(zhí)行期間一直占有固定的存儲(chǔ)空間的方式。主要有兩種:(1)局部靜態(tài)變量(2)全局變量局部靜態(tài)變量局部靜態(tài)變量存儲(chǔ)于靜態(tài)存儲(chǔ)區(qū),在編譯時(shí)賦初值,程序運(yùn)行期間不賦初值,而是保留上一次函數(shù)調(diào)用

5、結(jié)束時(shí)的值,在整個(gè)程序運(yùn)行期間都占有空間。程序運(yùn)行結(jié)束時(shí)釋放空間。#include void fn()int a=0;static n=0;a+;n+;cout第n次調(diào)用函數(shù)f時(shí),a=a n=nendl;main()for(int i=0;i5;i+)fn();return 0;例如:當(dāng)需要保留函數(shù)上一次調(diào)用結(jié)束的值或初始化后,變量只被引用而不被改變的情況下一般用局部靜態(tài)變量。運(yùn)行結(jié)果為:第1次調(diào)用函數(shù)f時(shí),a=1,n=1第2次調(diào)用函數(shù)f時(shí),a=1,n=2第3次調(diào)用函數(shù)f時(shí),a=1,n=3第4次調(diào)用函數(shù)f時(shí),a=1,n=4第5次調(diào)用函數(shù)f時(shí),a=1,n=5全局變量全局變量存放在靜態(tài)存儲(chǔ)區(qū),在程

6、序開(kāi)始執(zhí)行時(shí)分配存儲(chǔ)單元,整個(gè)程序運(yùn)行期間都占據(jù)固定的存儲(chǔ)單元,程序執(zhí)行完畢釋放。在一個(gè)源文件中使用全局變量的情況已經(jīng)介紹過(guò)了,這里主要討論在不同源文件之間使用全局變量的情況。f1.cpp:int a;/變量定義main()f2.cpp:extern int a;/變量引用/extern int a=10;/變量定義int f() 情況1 允許被其它文件引用情況2 不允許被其他文件引用f1.cpp:static int atype fn()內(nèi)部函數(shù)和外部函數(shù)如果一個(gè)函數(shù)只能被本文件中的其它函數(shù)所調(diào)用,稱為內(nèi)部函數(shù),又稱靜態(tài)函數(shù),在函數(shù)定義時(shí)加static關(guān)鍵字。定義函數(shù)時(shí)在前面加一關(guān)鍵字ext

7、ern,表示此函數(shù)是外部函數(shù),可以被其它文件中的函數(shù)調(diào)用, extern可省略f1.cpp:#include extern void enters(char s);extern void deletes(char s,char c);extern void prints(char s);void main()char c;static char str80;enters(str);cinc;deletes(str,c);prints(str); 外部函數(shù)f2.cpp:void enters(char str) f3.cpp:void deletes(char str,char ch)f4.cp

8、p:void prints(char str)在編譯時(shí),先分別對(duì)四個(gè)文件進(jìn)行編譯,得到4個(gè)OBJ文件(目標(biāo)文件),在把OBJ文件連接起來(lái)生成一個(gè)可執(zhí)行文件。 在編譯時(shí),先分別對(duì)四個(gè)文件進(jìn)行編譯,得到4個(gè)OBJ文件(目標(biāo)文件),在把OBJ文件連接起來(lái)生成一個(gè)可執(zhí)行文件。 內(nèi)部函數(shù)內(nèi)部函數(shù)不允許被其他文件所引用:static type fn()編譯預(yù)處理宏定義文件包含處理?xiàng)l件編譯宏定義宏定義的一般形式是#define 標(biāo)識(shí)符 字符串#include#define PI 3.1415926void main( )float p,s;int r=2;p=2*PI*r;s=PI*r*r;cout半徑為r

9、的圓周長(zhǎng)是p,面積是sendl;例如:宏定義是用宏名代替一個(gè)字符串,只作簡(jiǎn)單置換,不作語(yǔ)法檢查。宏定義不是C語(yǔ)句,在末尾不加分號(hào)宏名習(xí)慣用大寫字母表示宏定義時(shí)可以引用已經(jīng)定義的宏名,層層替換。#define PI 3.1415926#define R 2#define S PI*R*R#define P 2*PI*R 宏定義的有效位置一般從宏定義開(kāi)始到文件的結(jié)束,也可以用#undef命令結(jié)束宏定義。#define PI 3.1415926main()#undef PIf()帶參數(shù)的宏定義宏定義也可以帶參數(shù),這時(shí)不僅要進(jìn)行宏名的替換,還要進(jìn)行參數(shù)的替換。#define 宏名(參數(shù)表) 字符串 #

10、include#define max(a,b) ab?a:bvoid main()int n1=3,n2=5;int z1,z2;z1=max(n1,n2);z2=max(9,6);coutz1=z1endl;coutz2=z2v2?n1:n296?9:6思考:下列程序的運(yùn)行結(jié)果#include #define ADD(x,y) x+ymain()int z=0;coutz=2*ADD(10,20)endl;return 0;運(yùn)行結(jié)果:z=402*10+20文件包含說(shuō)明:(1)一個(gè)include命令只能指定一個(gè)被包含文件。 (2)如果文件1包含文件2,而文件2 用到文件3,可以在文件1中寫入以

11、下代碼: #include”file3.h”#include”file2.h” (3)#include命令中若文件名用“”括起來(lái),則系統(tǒng)先在引用被包含文件的源文件所在目錄中查找,再按系統(tǒng)指定的標(biāo)準(zhǔn)方式檢索其它目錄。若文件名用括起來(lái),系統(tǒng)不檢查源文件所在目錄,而是直接按系統(tǒng)標(biāo)準(zhǔn)方式檢索文件目錄。 (4)被包含文件與其所在文件在預(yù)編譯后成為一個(gè)文件,全局變量與靜態(tài)變量在整個(gè)文件中有效。 條件編譯條件編譯是對(duì)源程序中的一部分內(nèi)容在滿足一定條件時(shí)進(jìn)行編譯,這樣做可以減少被編譯的語(yǔ)句,減小目標(biāo)程序的長(zhǎng)度。條件編譯命令有三種形式:1、#ifdef 標(biāo)識(shí)符程序段1#else程序段2#endif 2、#ifndef 標(biāo)識(shí)符程序段1#else 程序段2#endif3、#if 表達(dá)式程序段1#else 程序段2#endif#include

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論