C語(yǔ)言--變量的作用域與生存期.ppt_第1頁(yè)
C語(yǔ)言--變量的作用域與生存期.ppt_第2頁(yè)
C語(yǔ)言--變量的作用域與生存期.ppt_第3頁(yè)
C語(yǔ)言--變量的作用域與生存期.ppt_第4頁(yè)
C語(yǔ)言--變量的作用域與生存期.ppt_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、變量的作用域與生存期,作用域與生存期概述 變量的作用域(空間特性) 變量的作用域也稱為可見性,指變量能夠被訪問的范圍 分為局部變量和全局變量?jī)深悾壕植孔兞康姆秶^窄,限定在程序中的部分區(qū)域;全局變量的范圍較寬,可以是整個(gè)文件甚至是整個(gè)程序 變量的存儲(chǔ)類別(時(shí)間特性) 除作用域(可見性)外的另外兩個(gè)特性:變量存放在計(jì)算機(jī)何處,變量何時(shí)存在 存儲(chǔ)類別 變量存在的位置:RAM 或 CPU寄存器 RAM 劃分:代碼區(qū)、靜態(tài)存儲(chǔ)區(qū)、動(dòng)態(tài)存儲(chǔ)區(qū) 存儲(chǔ)類別:RAM:static、auto,CPU:register,內(nèi)部變量 局部變量-內(nèi)部變量 定義:在函數(shù)內(nèi)或復(fù)合語(yǔ)句內(nèi)定義,只在本函數(shù)內(nèi)或復(fù)合語(yǔ)句內(nèi)有效 說

2、明: main中定義的變量只在main中有效 不同函數(shù)中同名變量,占不同內(nèi)存單元 形參屬于局部變量 可定義在復(fù)合語(yǔ)句中有效的變量 局部(空間特性)變量可用存儲(chǔ)類型(時(shí)間特性):auto register static (默認(rèn)為auto,可省略),void sub() int a,b; a = 6; b = 7; printf(sub:a=%d,b=%dn,a,b); void main() int a,b; a = 3; b = 4; printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b); ,#define N 5 vo

3、id main() int i; int aN = 1,2,3,4,5; for(i=0;iN/2;i+) int temp; temp = ai; ai = aN-i-1; aN-i-1 = temp; for(i = 0;i N;i+) printf(%d ,ai); ,例 不同函數(shù)中同名變量,例 復(fù)合語(yǔ)句中變量,運(yùn)行結(jié)果:5 4 3 2 1,運(yùn)行結(jié)果: main:a=3,b=4 sub:a=6,b=7 main:a=3,b=4,自動(dòng)變量 ( auto ) 格式:auto 類型 變量名列表; auto 可省略 auto int a; 等價(jià)于 int a; 自動(dòng)變量的生存期:自動(dòng)變量存在于

4、RAM 中的動(dòng)態(tài)存儲(chǔ)區(qū)“棧”,并且僅當(dāng)定義它的函數(shù)或復(fù)合語(yǔ)句被執(zhí)行時(shí),才創(chuàng)建該變量,執(zhí)行結(jié)束后該變量自動(dòng)被刪除掉,釋放占用的內(nèi)存空間。 自動(dòng)變量用的最多,不會(huì)永久占用內(nèi)存空間。,寄存器變量 格式:register 類型 變量名列表; for(register int a=0; a1000000; a+) 寄存器變量存在于 cpu 內(nèi)部的寄存器中,數(shù)量很少,一般是將循環(huán)使用很多次的變量放在寄存器中,加快執(zhí)行速度。 注意: 只有整型變量能放在寄存器中,包括:int、char、short、long等。 寄存器變量必須是 auto 類型的局部變量、形參,不能是全局變量或靜態(tài)變量。 由于寄存器數(shù)量很少,

5、不能保證定義的寄存器變量總是能分配到寄存器,這時(shí)作為普通變量。 對(duì)于寄存器變量,不能做取地址( for(i = 1;i = n;i+) f = f*i; return(f); void main() int i; for(i = 1;i = 1000;i+) printf(“%d!=%dn”,i,fac(i); ,1、只有局部自動(dòng)變量和 形式參數(shù)可以作為寄存器 變量2、不能定義任意多個(gè)寄 存器變量3、局部靜態(tài)變量不能定義 為寄存器變量,靜態(tài)內(nèi)部變量 格式:static 類型 變量名列表; static int a; 形參不能是定義成 static。 內(nèi)部變量定義成 static 后,作用域不變

6、,但生存期變長(zhǎng),在整個(gè)程序執(zhí)行前就存在,直到程序結(jié)束才清除掉,其生存期為整個(gè)程序的運(yùn)行期。 使用注意: 靜態(tài)變量只初始化一次。 靜態(tài)變量的值具有“記憶”性。 盡管生存期變長(zhǎng),但作用域(可見性)仍然局限在定義它的局部范圍內(nèi)。,void main() int i; for(i=0;i 3;i+) inc1(); for(i=0;i 3;i+) inc2(); ,例 靜態(tài)內(nèi)部變量的生存期,#include void inc1() int x=0; x+; printf(in inc1 x=%dn,x); void inc2() static int x=0; x+; printf(in inc2 x

7、=%dn,x); ,運(yùn)行結(jié)果: in inc1 x=1 in inc1 x=1 in inc1 x=1 in inc2 x=1 in inc2 x=2 in inc2 x=3,外部變量-全局變量 定義:在函數(shù)外定義,可為本文件所有函數(shù)共用 作用域:從定義變量的位置開始到本源文件結(jié)束,及有extern說明的其它源文件 生存期:整個(gè)程序運(yùn)行期間,! 應(yīng)盡量少使用全局變量,因?yàn)椋?全局變量在程序全部執(zhí)行過程中占用存儲(chǔ)單元 降低了函數(shù)的通用性、可靠性,可移植性 降低程序清晰性,容易出錯(cuò),定義 說明 次數(shù): 只能1次 可說明多次 位置: 所有函數(shù)之外 函數(shù)內(nèi)或函數(shù)外 分配內(nèi)存: 分配內(nèi)存,可初始化 不分

8、配內(nèi)存,不可初始化,用 extern 聲明外部變量:extern 數(shù)據(jù)類型 變量表;,外部變量定義與外部變量說明(聲明)不同,若外部變量與局部變量同名,則外部變量被屏蔽,外部變量可用存儲(chǔ)類型:缺省 或 static,/*ch7_17.c*/ int a = 3, b = 5; int max(int a, int b) int c; c=ab?a:b; return(c); void main() int a = 8; printf(max=%d,max(a,b); ,例 外部變量與局部變量(同名的局部變量屏蔽外部變量),運(yùn)行結(jié)果:max=8,float max, min; float ave

9、rage(float array, int n) int i; float sum = array0; max = min = array0; for (i=1; i max ) max = arrayi; else if( arrayi min) min = arrayi; sum += arrayi; return (sum/n); void main() int i; float ave,score10; /*Input data to score 省略*/ ave = average(score,10); printf(max=%6.2fnmin=%6.2fn average=%6.2

10、fn,max,min,ave); ,外部變量增加了函數(shù)間數(shù)據(jù)聯(lián)系的渠道,extern char c1,c2;,extern char c1,c2;,用 extern 聲明外部變量 可以擴(kuò)展外部變量的作 用域,int add(int x,int y) int z; z=x+y; return z; void main() extern int a,b; printf(“a+b=%dn,add(a,b); int a=3, b=4;,例 用extern擴(kuò)展外部變量作用域,運(yùn)行結(jié)果: a+b=7,例 用extern將變量的作用域擴(kuò)展到其它文件中,int x=10,y=10; extern void

11、sub(); void add(void) int y =5; y = 10+x; x *= 2; printf(add:y=%d:,y); void main() x+=5; add(); sub(); printf(main:x=%d,main:y= %dn,x,y); ,extern int x; void sub() int y=5; x -= y; printf(sub:y=%d;,y); ,file1.c,file2.c,運(yùn)行結(jié)果: add:y=25;sub:y=5; main:x=25;main:y=10;,static int x=10; void add2() extern

12、int y; x+=10; y+=2; printf(in add2 x=%dn,x); ,例 static 型外部變量的作用域受到限制,限制在本文件內(nèi)使用,運(yùn)行結(jié)果: in add1 x=4 in add2 x=20 in add1 x=6 in add2 x=30 x=6;y=13,static int x=2; int y=3; extern void add2(); void add1(); void main() add1();add2();add1();add2(); printf(x=%d;y=%dn,x,y); void add1() x+=2; y+=3; printf(in adda x=%dn,x); ,int i; void main() void prt(); for(i = 0;i 5;i+) prt(); void prt() for(i = 0;i 5;i+) printf(“%c”,*); printf(“n”); ,例 外部變量副作用,運(yùn)行結(jié)果:*,例 文件file1.c int a; v

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論