版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+程序設(shè)計(jì),第3章(1) 函數(shù)的定義和調(diào)用,主要內(nèi)容,函數(shù)概述 函數(shù)的定義 函數(shù)的調(diào)用和返回 函數(shù)的參數(shù)傳遞值傳遞 函數(shù)的參數(shù)傳遞引用傳遞 函數(shù)的原型聲明 全局變量及其作用域 局部變量及其作用域 C+程序的內(nèi)存布局 標(biāo)識(shí)符的作用域塊作用域、文件作用域、函數(shù)原型作用域、函數(shù)作用域 變量的存儲(chǔ)類型和生存期 函數(shù)的調(diào)用機(jī)制,函數(shù)概述,關(guān)于C+函數(shù): C+程序的結(jié)構(gòu)化特點(diǎn):就是整個(gè)程序由一個(gè)或多個(gè)函數(shù)組成,每個(gè)函數(shù)具有相對(duì)獨(dú)立的功能,函數(shù)之間有明顯的界面,程序整體具有清晰的模塊結(jié)構(gòu),易于修改。 C+函數(shù)有兩大類:一類是系統(tǒng)預(yù)定義的,稱為庫(kù)函數(shù)或標(biāo)準(zhǔn)函數(shù),這些庫(kù)函數(shù)按照不同的功能進(jìn)行分類,集中定義在不
2、同的頭文件中,用戶只要在自己的程序中包含某個(gè)頭文件,就可直接使用該頭文件中定義的函數(shù)。另一類是用戶自定義函數(shù),用戶可以根據(jù)需要將程序中某個(gè)具有相對(duì)獨(dú)立功能的程序段定義為函數(shù)。 C+程序的基本模塊:就是函數(shù),任何一個(gè)C+程序均由若干個(gè)函數(shù)組成,其中有且僅有一個(gè)主函數(shù),它是程序執(zhí)行的入口函數(shù), VC+控制臺(tái)編程是由用戶定義的main()作為入口函數(shù),Windows編程是由編譯器定義的WinMain()作為入口函數(shù)。,函數(shù)概述,C+函數(shù)之間是并列平等的關(guān)系,在程序中的定義位置任意,一個(gè)函數(shù)可以調(diào)用其它函數(shù),也可以被其他函數(shù)所調(diào)用,但主函數(shù)只能調(diào)用其他函數(shù),而不能被調(diào)用。 函數(shù)定義的并列關(guān)系 函數(shù)調(diào)用
3、的層次關(guān)系 void f1( ) f1的函數(shù)體 void f2( ) f2的函數(shù)體 void main( ) main的函數(shù)體 void f3( ) f3的函數(shù)體 void f4( ) f4的函數(shù)體 void f5( ) f5的函數(shù)體 ,函數(shù)的定義,函數(shù)的定義 : 格式: 返回值類型 函數(shù)名 ( 類型1 形參1 ,類型2 形參2 , ,類型n 形參n ) 語(yǔ)句序列 說(shuō)明: 返回值類型可以是C+中任意基本數(shù)據(jù)類型、已定義的構(gòu)造數(shù)據(jù)類型; 若函數(shù)沒(méi)有返回值,則返回值類型定義為 void 型; 若函數(shù)返回值類型省略,表示返回值類型為 int 型。,函數(shù)的定義,函數(shù)名按標(biāo)識(shí)符命名規(guī)則命名,其后括號(hào)內(nèi)定
4、義的是函數(shù)的形式參數(shù); 若該函數(shù)為無(wú)參函數(shù),括號(hào)內(nèi)的 void 通常省略不寫,但括號(hào)不能省略! 形式參數(shù)表列出所有形式參數(shù)的數(shù)據(jù)類型、參數(shù)名稱; 各參數(shù)即使類型相同,也必須分別進(jìn)行類型說(shuō)明; 形參類型可以是C+中任意基本數(shù)據(jù)類型、已定義的構(gòu)造數(shù)據(jù)類型。 函數(shù)參數(shù)的作用:函數(shù)調(diào)用時(shí),主調(diào)函數(shù)通過(guò)參數(shù)將數(shù)據(jù)傳遞給被調(diào)函數(shù)。 函數(shù)返回值的作用:函數(shù)返回時(shí),被調(diào)函數(shù)可將一個(gè)確定的值帶回到主調(diào)函數(shù)。 若函數(shù)有返回值,則 return語(yǔ)句格式為: return 表達(dá)式 ; 且 return 后面表達(dá)式值的類型必須與函數(shù)返回值類型相匹配! 若函數(shù)無(wú)返回值,則返回值類型定義為void,且return語(yǔ)句格式為
5、: return ;,函數(shù)的調(diào)用和返回,函數(shù)的調(diào)用 : 格式: 函數(shù)名 ( 實(shí)參1 ,實(shí)參2 , ,實(shí)參n ) 調(diào)用:就是控制從主調(diào)函數(shù)轉(zhuǎn)去執(zhí)行被調(diào)函數(shù)的函數(shù)體。調(diào)用時(shí),系統(tǒng)要將實(shí)參值按位置傳遞給對(duì)應(yīng)的形參,因此,一般情況下實(shí)參與形參在個(gè)數(shù)、排列順序上都必須一一對(duì)應(yīng),且類型匹配。 函數(shù)的返回 :就是控制從被調(diào)函數(shù)返回到主調(diào)函數(shù)的調(diào)用點(diǎn)。返回時(shí),即在被調(diào)函數(shù)中執(zhí)行到 return語(yǔ)句時(shí),若有返回值帶回,則先計(jì)算 return語(yǔ)句后面表達(dá)式的值,并轉(zhuǎn)換成所規(guī)定的返回值類型,此時(shí)系統(tǒng)會(huì)在內(nèi)存中建立一個(gè)臨時(shí)變量,用來(lái)存放該返回值,待主調(diào)函數(shù)中包含該調(diào)用式的表達(dá)式語(yǔ)句從該臨時(shí)變量中取值后,系統(tǒng)便撤消該臨
6、時(shí)變量。,【例】(定義求三個(gè)實(shí)數(shù)中最大數(shù)的函數(shù)max()。) # include float max ( float x , float y , float z ) /要將三個(gè)實(shí)數(shù)傳遞給max()函數(shù),需定義三個(gè)形參。 float t = yz ? y : z ; return ( xt ? x : t ) ; void main ( ) float a , b , c ; cout a b c ; cout “最大數(shù):” max( a , b , c ) endl ; ,運(yùn)行: 請(qǐng)輸入三個(gè)實(shí)數(shù):13 56 -89 最大數(shù):56,函數(shù)的參數(shù)傳遞,形參與實(shí)參: 函數(shù)定義時(shí),寫在函數(shù)頭部參數(shù)表中的
7、變量,稱為形式參數(shù)(形參)。 函數(shù)調(diào)用時(shí),寫在調(diào)用式參數(shù)表中的表達(dá)式、變量、常量,稱為實(shí)在參數(shù)(實(shí)參) 形參與實(shí)參的結(jié)合:編譯時(shí),并不為各函數(shù)的形參分配存儲(chǔ)空間,只有在該函數(shù)被調(diào)用時(shí),其形參才占用存儲(chǔ)空間,并通過(guò)堆棧從主調(diào)函數(shù)中獲得值,這個(gè)過(guò)程稱為形參與實(shí)參的結(jié)合,一旦函數(shù)調(diào)用結(jié)束,該函數(shù)的形參就被撤銷。 函數(shù)的參數(shù)傳遞方式有三種 : 值傳遞 引用傳遞 地址傳遞,函數(shù)的參數(shù)傳遞值傳遞,值傳遞: 調(diào)用函數(shù)進(jìn)行值傳遞時(shí),調(diào)用式中對(duì)應(yīng)的實(shí)參可以是常量、變量、表達(dá)式。 先計(jì)算出各個(gè)實(shí)參表達(dá)式的值,并將值賦給對(duì)應(yīng)的形參變量,其過(guò)程就是賦值,因此,要求實(shí)參值的類型與形參變量類型符合賦值兼容。 由于值傳遞就
8、是賦值傳遞,因此是單向傳遞,即實(shí)參值傳遞給形參變量后,若形參變量的值發(fā)生變化不會(huì)影響到對(duì)應(yīng)的實(shí)參變量。 【例】 # include void swap ( int a , int b ) int t = a ; a = b ; b = t ; void main ( ) int x , y ; cout x y ; cout “調(diào)用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “調(diào)用后:x = ” x “ty = ” y endl ; ,運(yùn)行: 請(qǐng)輸入兩個(gè)整數(shù): 58 97 調(diào)用前:x=56 y=97 調(diào)用后:x=56 y=97,【例】 # i
9、nclude int maxi ( int a , int b ) return ab ? a : b ; float maxf ( float a , float b ) return ab ? a : b ; void main ( void ) float x = 3.4 , y = 5.6 ; char c1=A , c2 = B ; int i = 20 , j = 30 ; cout maxi ( x , y ) t ; cout maxf ( x , y ) t ; cout maxi ( c1 , c2 ) t ; cout maxf ( c1 , c2 ) t ; cout
10、maxi ( i+j , 45+y ) t ; cout maxf ( i+j , 45+y ) endl ; ,運(yùn)行: 5 5.6 66 66 50 55.6,函數(shù)的參數(shù)傳遞引用傳遞,引用類型:是C+中一種特殊的數(shù)據(jù)類型, 定義引用類型變量,其本質(zhì)是給一個(gè)已定義的變量起一個(gè)別名,系統(tǒng)并不為引用類型變量分配內(nèi)存空間,引用類型變量與其相關(guān)聯(lián)的變量使用的是同一個(gè)內(nèi)存空間。 引用類型變量的定義: 格式: ,運(yùn)行: x = 7 x1= 7 x2 = 5,函數(shù)的參數(shù)傳遞引用傳遞,引用類型變量可以作為函數(shù)的形參,以實(shí)現(xiàn)參數(shù)的引用傳遞。 【例】 void swap ( int 引用傳遞: 調(diào)用函數(shù)時(shí),系統(tǒng)對(duì)
11、引用類型的形參是不分配存儲(chǔ)空間的,其本質(zhì)是給對(duì)應(yīng)的實(shí)參變量起一個(gè)別名。 進(jìn)行引用傳遞時(shí),調(diào)用式中對(duì)應(yīng)的實(shí)參只能是變量。 引用傳遞時(shí)傳遞的是變量名,引用類型的形參變量與其相關(guān)聯(lián)的實(shí)參變量使用的是同一個(gè)存儲(chǔ)空間,若引用類型的形參變量的值發(fā)生變化,其相關(guān)聯(lián)的實(shí)參變量的值也就隨之變化,因此是雙向傳遞。,【例】(值傳遞) # include void swap ( int a , int b ) int t = a ; a = b ; b = t ; void main ( ) int x = 5 , y = 10 ; cout void swap ( int ,函數(shù)的原型聲明,函數(shù)的原型聲明: C+中
12、,把函數(shù)的定義部分稱為函數(shù)的定義性聲明,而把對(duì)函數(shù)的引用性聲明稱為函數(shù)的原型聲明。 當(dāng)函數(shù)定義在前、調(diào)用在后時(shí),可直接調(diào)用;當(dāng)函數(shù)調(diào)用在前、定義在后時(shí),在函數(shù)被調(diào)用前,必須對(duì)被調(diào)函數(shù)作原型聲明,函數(shù)原型聲明可放在主調(diào)函數(shù)中,也可放在所有函數(shù)之外。 函數(shù)原型聲明的目的是告知編譯系統(tǒng),該函數(shù)的返回值類型、參數(shù)個(gè)數(shù)、順序、各參數(shù)的類型,以便編譯系統(tǒng)對(duì)其后該函數(shù)調(diào)用式是否有效進(jìn)行語(yǔ)法檢查。 函數(shù)原型聲明的格式: 格式1: 函數(shù)頭 + 末尾加分號(hào) 返回值類型 函數(shù)名 ( 類型1 形參1 ,類型2 形參2 , ,類型n 形參n ) ; 格式2: 函數(shù)頭(去掉形參變量名) + 末尾加分號(hào) 返回值類型 函數(shù)名
13、 ( 類型1 ,類型2 , ,類型n ) ;,【例】(輸入一個(gè)8位二進(jìn)制數(shù),將其轉(zhuǎn)換為十進(jìn)制數(shù)輸出。例:若輸入11010001, 110100012 = 1(27)+1(26)+0(25)+1(24)+0(23)+0(22)+0(21)+1(20) = 20910 ,輸出209。) # include void main ( ) double power ( double , int ) ; /power()函數(shù)的引用性聲明,即原型聲明 int value = 0 , k ; char c ; cout = 0 ; i- ) cin c ; if ( c = 1 ) value += ( in
14、t ) power( 2 , i ) ; /調(diào)用power()函數(shù) cout “十進(jìn)制數(shù):” value endl ; double power ( double x , int n ) /power()函數(shù)的定義性聲明 double t = 1 ; while ( n- ) t *= x ; return t ; ,運(yùn)行: 請(qǐng)輸入一個(gè)8位二進(jìn)制數(shù):11010001 十進(jìn)制數(shù):209,【例】(求的值,arctan(x) 用級(jí)數(shù)計(jì)算,直到某項(xiàng)絕對(duì)值不大于10-15為止。 ) # include # include void main ( ) double a , b ; double arcta
15、n ( double x ) ; /arctan()函數(shù)的引用性聲明,即原型聲明 a = 16 * arctan ( 1 / 5. ) ; /調(diào)用arctan()函數(shù),且如果寫成1/5,結(jié)果就都是0 b = 4 * arctan ( 1 / 239.0 ) ; /調(diào)用arctan()函數(shù),且如果寫成1/239,結(jié)果就都是0 cout 1e-15 ; i+=2 ) sum += sign * t / i ; t = t * x * x ; sign *= -1 ; return sum ; ,運(yùn)行: = 3.14159,【例】(找出 11999 之間的數(shù)m,使之滿足m、m2、m3均為回文數(shù)。 回
16、文:各位數(shù)字左右對(duì)稱的整數(shù)。例:11、 112=121、113=1331,則輸出11。) 分析:從最低位開(kāi)始,用除10取余的方法,依次取出該數(shù)的各位數(shù)字; 按反序重新構(gòu)成新的數(shù),若新數(shù)與原數(shù)完全相等,則原數(shù)為回文。 # include void main ( ) bool symm ( int n ) ; /symm()函數(shù)的引用性聲明,即原型聲明 for ( int m=11 ; m=999 ; m+ ) if (symm( m ) ,運(yùn)行: m=11 m*m=121 m*m*m=1331 m=101 m*m=10201 m*m*m=1030301 m=111 m*m=12321 m*m*m
17、=1367631,【例】(求如下公式,r 和s 值鍵盤輸入,SIN(x)用級(jí)數(shù)計(jì)算,計(jì)算精度為10-3。) # include # include void main ( ) double tsin ( double ) ; double k , r , s ; cout r s ; if ( r*r = 1e-3 ; sign *= -1 ) sum += sign * t / p ; t = t * x * x ; i += 2 ; p = p * i * (i-1) ; return sum ; ,運(yùn)行: 請(qǐng)輸入 r 和 s 的值:3 1 r = 3 s = 1 k = 0.070437
18、3,全局變量及其作用域,關(guān)于全局變量: 作用:若程序中的某個(gè)變量要被多個(gè)函數(shù)所訪問(wèn),可將其定義為全局變量。 全局變量:指定義在函數(shù)之外的變量。 作用域:全局變量可以定義在函數(shù)外的任何位置,一旦在某個(gè)位置定義了全局變量,其后的任何函數(shù)均可以訪問(wèn)該全局變量。 存儲(chǔ)類型:全局變量存放在全局?jǐn)?shù)據(jù)區(qū)(靜態(tài)區(qū)),分配該區(qū)時(shí)內(nèi)存自動(dòng)初始化為0,因此全局變量若不做初始化,其初值為0。 生存期:全局變量在程序開(kāi)始運(yùn)行時(shí)就在全局區(qū)分配,程序運(yùn)行結(jié)束才被釋放。,局部變量及其作用域,關(guān)于局部變量: 塊的概念:指程序中用花括號(hào)“ ”括起來(lái)的一個(gè)程序段,稱為一個(gè)塊。 局部變量:指定義在函數(shù)之內(nèi)或某個(gè)塊內(nèi)的變量。 作用域:
19、局部變量可以定義在塊內(nèi)的任何位置,一旦在塊內(nèi)的某個(gè)位置定義了局部變量,只能在該塊內(nèi)該位置之后的那個(gè)區(qū)域內(nèi)才可以訪問(wèn)該局部變量。 存儲(chǔ)類型:auto自動(dòng)類型局部變量、static靜態(tài)類型局部變量。 auto自動(dòng)局部變量:存放在局部數(shù)據(jù)區(qū)(棧區(qū)),分配棧區(qū)時(shí)內(nèi)存不做初始化,因此auto局部變量若不做初始化,其初值不確定。 static靜態(tài)局部變量:存放在全局?jǐn)?shù)據(jù)區(qū)(靜態(tài)區(qū)), 分配該區(qū)時(shí)內(nèi)存自動(dòng)初始化為0,因此static局部變量若不做初始化,其初值為0。,C+程序的內(nèi)存布局,操作系統(tǒng)為一個(gè)C+程序運(yùn)行定義了四個(gè)內(nèi)存區(qū)域: 代碼區(qū)存放程序代碼。 全局?jǐn)?shù)據(jù)區(qū)(靜態(tài)區(qū))存放全局變量、static靜態(tài)局
20、部變量。全局變量在程序開(kāi)始運(yùn)行時(shí)就在該區(qū)分配; static靜態(tài)局部變量在程序運(yùn)行中第一次進(jìn)入其作用域時(shí)在該區(qū)分配。二者都是直到程序運(yùn)行結(jié)束才被釋放。 局部數(shù)據(jù)區(qū)(棧區(qū)) 存放auto局部變量。 在程序運(yùn)行到其作用域時(shí)在棧區(qū)分配,但怎樣分配在編譯時(shí)就已經(jīng)確定。auto局部變量在離開(kāi)其作用域時(shí)即被釋放。 動(dòng)態(tài)數(shù)據(jù)區(qū)(自由存儲(chǔ)區(qū)、堆區(qū)) 存放運(yùn)行時(shí)由 new運(yùn)算符動(dòng)態(tài)創(chuàng)建的變量。動(dòng)態(tài)創(chuàng)建的變量在編譯時(shí)無(wú)法為它們預(yù)定存儲(chǔ)空間,系統(tǒng)根據(jù)運(yùn)行時(shí)的具體要求在該區(qū)進(jìn)行分配。在該區(qū)的變量必須用 delete運(yùn)算符才能將其釋放。,標(biāo)識(shí)符的作用域,作用域:指程序中標(biāo)識(shí)符(如變量名、函數(shù)名)的有效使用范圍,即作用范
21、圍。 目的:解決標(biāo)識(shí)符的同名問(wèn)題。當(dāng)標(biāo)識(shí)符具有不同的作用域時(shí),允許標(biāo)識(shí)符同名;當(dāng)標(biāo)識(shí)符的作用域完全相同時(shí),不允許標(biāo)識(shí)符同名。 C+中作用域有五種: 塊作用域 文件作用域 函數(shù)原型作用域 函數(shù)作用域 類作用域,標(biāo)識(shí)符的作用域塊作用域,塊:指程序中用花括號(hào)“ ”括起來(lái)的一個(gè)程序段,稱為一個(gè)塊。 塊作用域:在塊內(nèi)聲明的變量只能在該塊內(nèi)被引用,開(kāi)始于變量的聲明處,結(jié)束于塊的結(jié)尾處。 幾條原則: 形參變量的作用域:在其所屬函數(shù)的函數(shù)體塊內(nèi)。 局部變量的作用域:在其所屬的塊內(nèi),該變量的聲明位置之后的那個(gè)區(qū)域內(nèi)。 循環(huán)語(yǔ)句 for(表達(dá)式1;表達(dá)式2;表達(dá)式3)中表達(dá)式1 所聲明變量的作用域: 在for語(yǔ)句
22、所屬的塊內(nèi),該變量的聲明位置之后的那個(gè)區(qū)域內(nèi)。 局部?jī)?yōu)先原則:具有塊作用域的標(biāo)識(shí)符在其作用域內(nèi),將屏蔽其作用塊包含本塊的同名標(biāo)識(shí)符。,【例】(塊作用域) # include int fun ( int n ) cout “正在求:1+2+” n “n” ; int s = 0 ; for ( int i =1 ; i=n ; i+ ) char a = 7 ; cout a ; s += i ; return s ; void main ( ) int a = 5 , b = 7 ; cout “第1次調(diào)用:” fun( a ) endl ; int a = 9 , b = 11 ; cout
23、 “第2次調(diào)用:” fun( a ) endl ; cout “第3次調(diào)用:” fun( b ) endl ; cout “第4次調(diào)用:” fun( b ) endl ; ,運(yùn)行: 正在求:1+2+5 第1次調(diào)用:15 正在求:1+2+9 第2次調(diào)用:45 正在求:1+2+11 第3次調(diào)用:66 正在求:1+2+7 第4次調(diào)用:28,【例】(塊作用域) # include void main ( ) int a = 10 , b = 20 , c = 30 ; cout void main ( ) for ( int a = 1 ; a = 5 ; a+ ) int a = 2 ; cout
24、“a = ” +a endl ; cout “a = ” a endl ; ,運(yùn)行: a=10 b=20 c=30 a=40 b=50 c=90 a=10 b=20 c=90,運(yùn)行: a = 3 a = 3 a = 3 a = 3 a = 3 a = 6,標(biāo)識(shí)符的作用域文件作用域,文件作用域:在函數(shù)外聲明的變量可在該文件內(nèi)被引用,開(kāi)始于變量的聲明處,結(jié)束于文件的結(jié)尾處,即一旦在某個(gè)位置定義了全局變量,在其后的整個(gè)文件中均可以訪問(wèn)。 幾條原則: 全局變量作用域從定義處開(kāi)始到文件結(jié)尾處結(jié)束,遵循聲明在前、使用在后。 當(dāng)全局變量引用在前、聲明在后時(shí),需先對(duì)全局變量作外部聲明。 格式: extern
25、類型 全局變量名 ; 當(dāng)全局變量與塊作用域內(nèi)的局部變量同名時(shí),局部變量?jī)?yōu)先。 在塊作用域內(nèi),若要引用同名的全局變量時(shí),可通過(guò)域運(yùn)算符 “ : ” 來(lái)引用。 格式: : 全局變量名,【例】(文件作用域) # include int a = 5 , b ; /a、b定義在函數(shù)外,為全局變量 extern int c ; /全局變量c引用在前、聲明在后時(shí),需先外部聲明 void main ( ) int a = 10 , b = 20 ; /a、b定義在函數(shù)內(nèi),為局部變量 cout “a=” a “tb=” b “tc=” c endl ; a = 18 ; :b = :b + 4 ; /引用全局變
26、量b c = :a +a ; /引用全局變量c和a,引用局部變量a cout “a=” a “tb=” b “tc=” c endl ; cout “a=” :a “tb=” :b “tc=” c endl ; int c = 88 ; /c定義在函數(shù)外,為全局變量,運(yùn)行: a=10 b=20 c=88 a=18 b=20 c=23 a=5 b=4 c=23,標(biāo)識(shí)符的作用域函數(shù)原型作用域、函數(shù)作用域,函數(shù)原型作用域: 在函數(shù)原型聲明的參數(shù)表中聲明的標(biāo)識(shí)符,所具有的作用域稱為函數(shù)原型作用域,即從其聲明處開(kāi)始,到函數(shù)原型聲明的結(jié)束處結(jié)束。 函數(shù)原型聲明中所聲明的標(biāo)識(shí)符,其作用域僅在函數(shù)原型聲明的語(yǔ)
27、句內(nèi),因此與該函數(shù)的定義和調(diào)用均無(wú)關(guān),所以在函數(shù)原型聲明中可只作參數(shù)的類型聲明,而省略參數(shù)名。 【例】函數(shù)原型聲明:void swap ( int a , int b ) ; /a、b作用域僅在該句內(nèi) 函數(shù)原型聲明:void swap ( int , int ) ; 函數(shù)作用域: 函數(shù)作用域是指在函數(shù)內(nèi)定義的標(biāo)識(shí)符在其定義的函數(shù)內(nèi)均有效,即不論在函數(shù)內(nèi)的任何地方定義,在整個(gè)函數(shù)內(nèi)均可以引用。 C+中只有語(yǔ)句標(biāo)號(hào)具有函數(shù)作用域。,變量的存儲(chǔ)類型和生存期,存儲(chǔ)類型:變量的存儲(chǔ)類型反映了變量占用內(nèi)存空間的期限,它規(guī)定了變量的生存期,即何時(shí)為變量分配內(nèi)存空間、何時(shí)撤消變量收回為其分配的內(nèi)存空間。 在聲
28、明變量時(shí),可對(duì)其存儲(chǔ)類型進(jìn)行定義,格式: 存儲(chǔ)類型 類型 變量名1 = 初值1 ,變量名2 = 初值2 , ; 其中存儲(chǔ)類型有四種: 自動(dòng)類型auto 靜態(tài)類型static 寄存器類型register 外部類型extern 當(dāng)存儲(chǔ)類型省略時(shí),對(duì)于局部變量則表示auto。,變量的存儲(chǔ)類型和生存期,auto自動(dòng)類型變量: 聲明局部變量時(shí),用auto修飾屬自動(dòng)類型變量,存放在局部數(shù)據(jù)區(qū),即棧區(qū) 。 auto局部變量在程序運(yùn)行到其作用域時(shí)在棧區(qū)分配,在離開(kāi)其作用域時(shí)即被釋放,因此生存期僅在其作用域內(nèi)。 聲明局部變量時(shí)若省略存儲(chǔ)類型,C+編譯器默認(rèn)為auto。 自動(dòng)類型變量未初始化時(shí),其初值不確定。 全
29、局變量無(wú)自動(dòng)類型。,變量的存儲(chǔ)類型和生存期,static靜態(tài)類型變量: 聲明局部變量時(shí),用static修飾屬靜態(tài)類型變量,存放在全局?jǐn)?shù)據(jù)區(qū),即靜態(tài)區(qū) 。 static局部變量的生存期:在程序運(yùn)行中第一次進(jìn)入其作用域時(shí)在靜態(tài)區(qū)分配,離開(kāi)其作用域時(shí)并不釋放,只是不能引用,若程序運(yùn)行中再次進(jìn)入該static局部變量的作用域,由于該變量已經(jīng)存在,所以不再分配空間,可直接引用。 static局部變量直到程序運(yùn)行結(jié)束才被釋放。 static局部變量的作用:是保存函數(shù)的運(yùn)行結(jié)果,以便再次調(diào)用該函數(shù)時(shí),能繼續(xù)使用上次調(diào)用的計(jì)算結(jié)果。注意,不在其作用域時(shí),不能直接引用;若需引用,可間接實(shí)現(xiàn),即通過(guò)該 stati
30、c 局部變量的地址進(jìn)行訪問(wèn)(后續(xù)章節(jié)介紹)。,變量的存儲(chǔ)類型和生存期,全局變量聲明時(shí)無(wú)論前面加或不加static,都具有靜態(tài)生存期,因?yàn)槿肿兞慷即娣旁谌謹(jǐn)?shù)據(jù)區(qū),即靜態(tài)區(qū) 。 但用 static 修飾的全局變量,稱為靜態(tài)全局變量。靜態(tài)全局變量與一般的全局變量在形式上類似,但含義有所不同,靜態(tài)全局變量只能在其定義的源文件中有效(該文件中可以有若干個(gè)函數(shù)),而在該程序的其他源文件中則是無(wú)效的;而一般的全局變量可以通過(guò) extern 修飾后,作用于該程序的多個(gè)源文件。 靜態(tài)類型變量未初始化時(shí),其初值為0。,【例】 # include int a = 1 , b = 2 ; /a、b為全局變量,在靜
31、態(tài)區(qū) int fun ( ) static int a =3 ; /a為靜態(tài)局部變量,在靜態(tài)區(qū) int b = 4 ; /b為auto局部變量,在棧區(qū) a += b ; return a ; void main ( ) int a = 5 , b = 6 ; /a、b為auto局部變量,在棧區(qū) cout “a=” a “tb=” b endl ; for ( int i=1 ; i=3 ; i+ ) cout “第” i “次調(diào)用:” fun( ) endl ; cout “a=” a “tb=” b endl ; cout “a=” :a “tb=” :b endl ; ,【例】(與上例比較) # include int a = 1 , b = 2 ; /a、b為全局變量,在靜態(tài)區(qū) int fun ( ) int a = 3 ; /a為auto局部變量,在棧區(qū) int b = 4 ; /b為auto局部變量,在棧區(qū) a += b ; return a ; void main ( ) int a = 5 , b = 6 ; /a、b為auto局部變量,在棧區(qū) cout “a=” a “tb=” b endl ; for ( int i=1 ; i=3 ; i+
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 澡堂衛(wèi)生考核制度
- 公共衛(wèi)生技培訓(xùn)制度
- 美甲店員工衛(wèi)生制度
- 工資發(fā)放財(cái)務(wù)制度
- 食堂廚房衛(wèi)生安全管理制度
- 甘肅省文聯(lián)財(cái)務(wù)制度管理辦法
- 關(guān)于基層衛(wèi)生院會(huì)計(jì)制度
- 礦區(qū)食堂衛(wèi)生管理制度
- 腌制食品庫(kù)房衛(wèi)生制度
- 車間衛(wèi)生考評(píng)制度
- 2025大模型安全白皮書
- 2026國(guó)家國(guó)防科技工業(yè)局所屬事業(yè)單位第一批招聘62人備考題庫(kù)及1套參考答案詳解
- 工程款糾紛專用!建設(shè)工程施工合同糾紛要素式起訴狀模板
- 2026湖北武漢長(zhǎng)江新區(qū)全域土地管理有限公司招聘3人筆試備考題庫(kù)及答案解析
- 110(66)kV~220kV智能變電站設(shè)計(jì)規(guī)范
- (正式版)DB44∕T 2784-2025 《居家老年人整合照護(hù)管理規(guī)范》
- 2025年美國(guó)心臟病協(xié)會(huì)心肺復(fù)蘇和心血管急救指南(中文完整版)
- (2025年)教育博士(EdD)教育領(lǐng)導(dǎo)與管理方向考試真題附答案
- 1、湖南大學(xué)本科生畢業(yè)論文撰寫規(guī)范(大文類)
- 基于多源數(shù)據(jù)融合的深圳市手足口病時(shí)空傳播模擬與風(fēng)險(xiǎn)預(yù)測(cè)模型構(gòu)建及應(yīng)用
- 咯血的急救及護(hù)理
評(píng)論
0/150
提交評(píng)論