




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、主要主要(zhyo)內(nèi)容內(nèi)容 函數(shù)概述 函數(shù)的定義 函數(shù)的調(diào)用和返回 函數(shù)的參數(shù)傳遞值傳遞 函數(shù)的參數(shù)傳遞引用傳遞 函數(shù)的原型聲明 全局變量及其作用域 局部變量及其作用域 C+程序的內(nèi)存布局 標識符的作用域塊作用域、文件作用域、函數(shù)原型作用域、函數(shù)作用域 變量的存儲類型(lixng)和生存期 函數(shù)的調(diào)用機制第1頁/共38頁第一頁,共39頁。函數(shù)函數(shù)(hnsh)(hnsh)概述概述 關于C+函數(shù): C+程序的結(jié)構(gòu)化特點:就是整個程序由一個或多個函數(shù)組成,每個函數(shù)具有相對獨立的功能,函數(shù)之間有明顯的界面,程序整體具有清晰(qngx)的模塊結(jié)構(gòu),易于修改。 C+函數(shù)有兩大類:一類是系統(tǒng)預定義的,稱為
2、庫函數(shù)或標準函數(shù),這些庫函數(shù)按照不同的功能進行分類,集中定義在不同的頭文件中,用戶只要在自己的程序中包含某個頭文件,就可直接使用該頭文件中定義的函數(shù)。另一類是用戶自定義函數(shù),用戶可以根據(jù)需要將程序中某個具有相對獨立功能的程序段定義為函數(shù)。 C+程序的基本模塊:就是函數(shù),任何一個C+程序均由若干個函數(shù)組成,其中有且僅有一個主函數(shù),它是程序執(zhí)行的入口函數(shù), VC+控制臺編程是由用戶定義的main()作為入口函數(shù),Windows編程是由編譯器定義的WinMain()作為入口函數(shù)。第2頁/共38頁第二頁,共39頁。函數(shù)函數(shù)(hnsh)(hnsh)概述概述 C+函數(shù)之間是并列(bngli)平等的關系,在
3、程序中的定義位置任意,一個函數(shù)可以調(diào)用其它函數(shù),也可以被其他函數(shù)所調(diào)用,但主函數(shù)只能調(diào)用其他函數(shù),而不能被調(diào)用。 函數(shù)定義的并列(bngli)關系 函數(shù)調(diào)用的層次關系void f1( ) f1的函數(shù)體 void f2( ) f2的函數(shù)體 void main( ) main的函數(shù)體 void f3( ) f3的函數(shù)體 void f4( ) f4的函數(shù)體 void f5( ) f5的函數(shù)體 main( )f1( )f2( )f3( )f4( )f6( )第3頁/共38頁第三頁,共39頁。函數(shù)函數(shù)(hnsh)(hnsh)的定義的定義 函數(shù)的定義 : 格式: 返回值類型 函數(shù)名 ( 類型1 形參1 ,
4、類型2 形參2 , ,類型n 形參n ) 語句(yj)序列 說明: 返回值類型可以是C+中任意基本數(shù)據(jù)類型、已定義的構(gòu)造數(shù)據(jù)類型; 若函數(shù)沒有返回值,則返回值類型定義為 void 型; 若函數(shù)返回值類型省略,表示返回值類型為 int 型。函數(shù)體函數(shù)頭第4頁/共38頁第四頁,共39頁。函數(shù)函數(shù)(hnsh)(hnsh)的定義的定義 函數(shù)名按標識符命名規(guī)則命名,其后括號內(nèi)定義的是函數(shù)的形式參數(shù); 若該函數(shù)為無參函數(shù),括號內(nèi)的 void 通常省略不寫,但括號不能省略! 形式參數(shù)表列出所有形式參數(shù)的數(shù)據(jù)類型、參數(shù)名稱; 各參數(shù)即使類型相同,也必須分別進行類型說明; 形參類型可以是C+中任意基本數(shù)據(jù)類型、
5、已定義的構(gòu)造數(shù)據(jù)類型。函數(shù)參數(shù)的作用:函數(shù)調(diào)用時,主調(diào)函數(shù)通過參數(shù)將數(shù)據(jù)傳遞給被調(diào)函數(shù)。函數(shù)返回(fnhu)值的作用:函數(shù)返回(fnhu)時,被調(diào)函數(shù)可將一個確定的值帶回到主調(diào)函數(shù)。 若函數(shù)有返回(fnhu)值,則 return語句格式為: return 表達式 ; 且 return 后面表達式值的類型必須與函數(shù)返回(fnhu)值類型相匹配! 若函數(shù)無返回(fnhu)值,則返回(fnhu)值類型定義為void,且return語句格式為: return ;第5頁/共38頁第五頁,共39頁。函數(shù)的調(diào)用函數(shù)的調(diào)用(dioyng)(dioyng)和返回和返回 函數(shù)的調(diào)用 : 格式: 函數(shù)名 ( 實參1
6、 ,實參2 , ,實參n ) 調(diào)用:就是控制從主調(diào)函數(shù)轉(zhuǎn)去執(zhí)行被調(diào)函數(shù)的函數(shù)體。調(diào)用時,系統(tǒng)要將實參值按位置傳遞給對應的形參,因此,一般情況下實參與形參在個數(shù)、排列順序上都必須一一對應,且類型匹配。 函數(shù)的返回 :就是控制從被調(diào)函數(shù)返回到主調(diào)函數(shù)的調(diào)用點。返回時,即在被調(diào)函數(shù)中執(zhí)行到 return語句時,若有返回值帶回,則先計算 return語句后面表達式的值,并轉(zhuǎn)換成所規(guī)定的返回值類型,此時系統(tǒng)會在內(nèi)存中建立一個臨時變量,用來存放該返回值,待主調(diào)函數(shù)中包含(bohn)該調(diào)用式的表達式語句從該臨時變量中取值后,系統(tǒng)便撤消該臨時變量。第6頁/共38頁第六頁,共39頁?!纠浚ǘx(dngy)求三
7、個實數(shù)中最大數(shù)的函數(shù)max()。)# include float max ( float x , float y , float z ) /要將三個實數(shù)傳遞給max()函數(shù),需定義(dngy)三個形參。 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 ; 運行(ynxng):請輸入三個實數(shù):13 56 -89 最大數(shù):56main()函數(shù)調(diào)用max( 13, 56, -89 )main()函數(shù)的
8、后續(xù)語句函數(shù)max( 13, 56, -89 )return 56主調(diào)函數(shù)被調(diào)函數(shù)第7頁/共38頁第七頁,共39頁。函數(shù)函數(shù)(hnsh)(hnsh)的參數(shù)傳遞的參數(shù)傳遞 形參與實參: 函數(shù)定義時,寫在函數(shù)頭部參數(shù)表中的變量,稱為形式參數(shù)(形參)。 函數(shù)調(diào)用時,寫在調(diào)用式參數(shù)表中的表達式、變量、常量,稱為實在參數(shù)(實參) 形參與實參的結(jié)合:編譯時,并不為各函數(shù)的形參分配存儲空間,只有在該函數(shù)被調(diào)用時,其形參才占用存儲空間,并通過堆棧從主調(diào)函數(shù)中獲得值,這個過程(guchng)稱為形參與實參的結(jié)合,一旦函數(shù)調(diào)用結(jié)束,該函數(shù)的形參就被撤銷。 函數(shù)的參數(shù)傳遞方式有三種 : 值傳遞 引用傳遞 地址傳遞第
9、8頁/共38頁第八頁,共39頁。函數(shù)函數(shù)(hnsh)(hnsh)的參數(shù)傳遞的參數(shù)傳遞值傳遞值傳遞 值傳遞: 調(diào)用函數(shù)進行值傳遞時,調(diào)用式中對應的實參可以是常量、變量、表達式。 先計算出各個實參表達式的值,并將值賦給對應的形參變量,其過程就是賦值,因此,要求實參值的類型與形參變量類型符合賦值兼容。 由于值傳遞就是賦值傳遞,因此是單向傳遞,即實參值傳遞給形參變量后,若形參變量的值發(fā)生變化不會影響到對應的實參變量。 【例】 # include void swap ( int a , int b ) int t = a ; a = b ; b = t ; void main ( ) int x , y
10、 ; cout x y ; cout “調(diào)用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “調(diào)用后:x = ” x “ty = ” y endl ; 運行:請輸入(shr)兩個整數(shù): 58 97 調(diào)用前:x=56 y=97調(diào)用后:x=56 y=97第9頁/共38頁第九頁,共39頁?!纠? include int maxi ( int a , int b ) return ab ? a : b ; float maxf ( float a , float b )return ab ? a : b ; void main ( void ) flo
11、at 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 maxi ( i+j , 45+y ) t ; cout maxf ( i+j , 45+y ) endl ;運行(ynxng):5 5.6 66 66 50 55.6float x=3.4 int a=3float y=5.6 int b=5float x
12、=3.4 float a=3.4float y=5.6 float b=5.6char c1=A int a=65char c2=B int b=66char c1=A float a=65char c2=B float b=66表達式 i+j 值50,int型 int a=50表達式 45+y 值50.6,float型 int b=50表達式 i+j 值50,int型 float a=50表達式 45+y 值50.6,float型 float b=50.6第10頁/共38頁第十頁,共39頁。函數(shù)函數(shù)(hnsh)(hnsh)的參數(shù)傳遞的參數(shù)傳遞引用傳遞引用傳遞 引用類型:是C+中一種特殊的數(shù)據(jù)
13、類型, 定義引用類型變量,其本質(zhì)是給一個(y )已定義的變量起一個(y )別名,系統(tǒng)并不為引用類型變量分配內(nèi)存空間,引用類型變量與其相關聯(lián)的變量使用的是同一個(y )內(nèi)存空間。 引用類型變量的定義: 格式: & = 功能:定義一個(y )引用類型變量,必須同時對其進行初始化,使之與一個(y )已定義過的同類型變量相關聯(lián),即給該已定義過的變量起一個(y )別名。 【例】 # include void main ( ) int x = 5 ; int & x1 = x ; int x2 = x ; x1 += 2 ; cout “x = ” x “tx1 = ” x1 “tx2 =
14、 ” x2 endl ; 57xx15x2運行(ynxng):x = 7 x1= 7 x2 = 5第11頁/共38頁第十一頁,共39頁。函數(shù)函數(shù)(hnsh)(hnsh)的參數(shù)傳遞的參數(shù)傳遞引用傳遞引用傳遞 引用類型變量可以作為函數(shù)的形參,以實現(xiàn)參數(shù)的引用傳遞。 【例】 void swap ( int &a , int &b ) int t = a ; a = b ; b = t ; 引用傳遞: 調(diào)用函數(shù)時,系統(tǒng)對引用類型的形參是不分配存儲空間的,其本質(zhì)是給對應的實參變量起一個別名。 進行引用傳遞時,調(diào)用式中對應的實參只能(zh nn)是變量。 引用傳遞時傳遞的是變量名,引用類型
15、的形參變量與其相關聯(lián)的實參變量使用的是同一個存儲空間,若引用類型的形參變量的值發(fā)生變化,其相關聯(lián)的實參變量的值也就隨之變化,因此是雙向傳遞。第12頁/共38頁第十二頁,共39頁?!纠浚ㄖ祩鬟f(chund)) # include void swap ( int a , int b ) int t = a ; a = b ; b = t ; void main ( ) int x = 5 , y = 10 ; cout “調(diào)用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “調(diào)用后:x = ” x “ty = ” y endl ; 【例】(引用傳遞
16、(chund)) # include void swap ( int &a , int &b ) int t = a ; a = b ; b = t ; void main ( ) int x = 5 , y = 10 ; cout “調(diào)用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “調(diào)用后:x = ” x “ty = ” y endl ; 運行:調(diào)用前:x=5 y=10調(diào)用后:x=10 y=5引用傳遞:main(): swap(): x a 10 y b 5510運行:調(diào)用前:x=5 y=10調(diào)用后:x=5 y=10值傳遞:
17、main(): swap():x a 10y b 5510510第13頁/共38頁第十三頁,共39頁。函數(shù)的原型函數(shù)的原型(yunxng)(yunxng)聲明聲明 函數(shù)的原型聲明: C+中,把函數(shù)的定義部分稱為函數(shù)的定義性聲明,而把對函數(shù)的引用性聲明稱為函數(shù)的原型聲明。 當函數(shù)定義在前、調(diào)用在后時,可直接調(diào)用;當函數(shù)調(diào)用在前、定義在后時,在函數(shù)被調(diào)用前,必須對被調(diào)函數(shù)作原型聲明,函數(shù)原型聲明可放在主調(diào)函數(shù)中,也可放在所有函數(shù)之外。 函數(shù)原型聲明的目的是告知編譯系統(tǒng),該函數(shù)的返回值類型、參數(shù)個數(shù)、順序、各參數(shù)的類型,以便編譯系統(tǒng)對其后該函數(shù)調(diào)用式是否(sh fu)有效進行語法檢查。 函數(shù)原型聲明
18、的格式: 格式1: 函數(shù)頭 + 末尾加分號 返回值類型 函數(shù)名 ( 類型1 形參1 ,類型2 形參2 , ,類型n 形參n ) ; 格式2: 函數(shù)頭(去掉形參變量名) + 末尾加分號 返回值類型 函數(shù)名 ( 類型1 ,類型2 , ,類型n ) ;第14頁/共38頁第十四頁,共39頁?!纠浚ㄝ斎胍粋€8位二進制數(shù),將其轉(zhuǎ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 ( d
19、ouble , int ) ; /power()函數(shù)的引用性聲明(shngmng),即原型聲明(shngmng) int value = 0 , k ; char c ; cout = 0 ; i- ) cin c ; if ( c = 1 ) value += ( int ) power( 2 , i ) ; /調(diào)用power()函數(shù) cout “十進制數(shù):” value endl ; double power ( double x , int n ) /power()函數(shù)的定義性聲明(shngmng) double t = 1 ; while ( n- ) t *= x ; return
20、t ; 運行:請輸入(shr)一個8位二進制數(shù):11010001十進制數(shù):209第15頁/共38頁第十五頁,共39頁?!纠浚ㄇ蟮闹担琣rctan(x) 用級數(shù)計算,直到某項絕對值不大于10-15為止。 )# include # include void main ( ) double a , b ; double arctan ( double x ) ; /arctan()函數(shù)的引用性聲明,即原型(yunxng)聲明 a = 16 * arctan ( 1 / 5. ) ; /調(diào)用arctan()函數(shù),且如果寫成1/5,結(jié)果就都是0 b = 4 * arctan ( 1 / 239.0 )
21、 ; /調(diào)用arctan()函數(shù),且如果寫成1/239,結(jié)果就都是0 cout “= ” ( a-b ) 1e-15 ; i+=2 ) sum += sign * t / i ; t = t * x * x ; sign *= -1 ; return sum ; 2391arctan451arctan16753)arctan(753xxxxx運行(ynxng):= 3.14159第16頁/共38頁第十六頁,共39頁。【例】(找出 11999 之間的數(shù)m,使之滿足m、m2、m3均為回文數(shù)。 回文:各位數(shù)字左右對稱的整數(shù)。例:11、 112=121、113=1331,則輸出11。) 分析:從最低位
22、開始,用除10取余的方法(fngf),依次取出該數(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 ) & symm( m*m ) & symm( m*m*m ) ) cout “m=” m “tm*m=” m*m “tm*m*m=” m*m*m endl ; bool symm ( int n ) /symm()函數(shù)的功能是判斷整數(shù)n是否
23、是回文 for ( int i=n , m=0 ; i != 0 ; i = i/10 ) m = m*10 + i%10 ; / m是新構(gòu)的數(shù) return ( m = n ) ;運行(ynxng):m=11 m*m=121 m*m*m=1331m=101 m*m=10201 m*m*m=1030301m=111 m*m=12321 m*m*m=1367631第17頁/共38頁第十七頁,共39頁?!纠浚ㄇ笕缦鹿?gngsh),r 和s 值鍵盤輸入,SIN(x)用級數(shù)計算,計算精度為10-3。)# include # include void main ( ) double tsin (
24、double ) ; double k , r , s ; cout r s ; if ( r*r = s*s ) k = sqrt ( tsin( r ) * tsin( r ) + tsin( s ) * tsin( s ) ) ; else k = tsin( r*s ) / 2 ; cout “r = ” r “ts = ” s “t k = ” k = 1e-3 ; sign *= -1 ) sum += sign * t / p ; t = t * x * x ; i += 2 ; p = p * i * (i-1) ; return sum ; 222222r)*(21r)()(
25、ssrSINssSINrSINk當當1121753)!12()1(!7!5! 3! 1nnnnxxxxxSINx運行(ynxng):請輸入 r 和 s 的值:3 1r = 3 s = 1 k = 0.0704373第18頁/共38頁第十八頁,共39頁。全局變量及其作用域全局變量及其作用域 關于全局變量: 作用:若程序中的某個(mu )變量要被多個函數(shù)所訪問,可將其定義為全局變量。 全局變量:指定義在函數(shù)之外的變量。 作用域:全局變量可以定義在函數(shù)外的任何位置,一旦在某個(mu )位置定義了全局變量,其后的任何函數(shù)均可以訪問該全局變量。 存儲類型:全局變量存放在全局數(shù)據(jù)區(qū)(靜態(tài)區(qū)),分配該區(qū)時內(nèi)
26、存自動初始化為0,因此全局變量若不做初始化,其初值為0。 生存期:全局變量在程序開始運行時就在全局區(qū)分配,程序運行結(jié)束才被釋放。第19頁/共38頁第十九頁,共39頁。局部變量及其作用域局部變量及其作用域 關于局部變量: 塊的概念:指程序中用花括號“ ”括起來的一個程序段,稱為一個塊。 局部變量:指定義(dngy)在函數(shù)之內(nèi)或某個塊內(nèi)的變量。 作用域:局部變量可以定義(dngy)在塊內(nèi)的任何位置,一旦在塊內(nèi)的某個位置定義(dngy)了局部變量,只能在該塊內(nèi)該位置之后的那個區(qū)域內(nèi)才可以訪問該局部變量。 存儲類型:auto自動類型局部變量、static靜態(tài)類型局部變量。 auto自動局部變量:存放在
27、局部數(shù)據(jù)區(qū)(棧區(qū)),分配棧區(qū)時內(nèi)存不做初始化,因此auto局部變量若不做初始化,其初值不確定。 static靜態(tài)局部變量:存放在全局數(shù)據(jù)區(qū)(靜態(tài)區(qū)), 分配該區(qū)時內(nèi)存自動初始化為0,因此static局部變量若不做初始化,其初值為0。第20頁/共38頁第二十頁,共39頁。C+C+程序的內(nèi)存程序的內(nèi)存(ni cn)(ni cn)布局布局 操作系統(tǒng)為一個C+程序運行定義了四個內(nèi)存區(qū)域: 代碼區(qū)存放程序代碼。 全局數(shù)據(jù)區(qū)(靜態(tài)區(qū))存放全局變量、static靜態(tài)局部變量。全局變量在程序開始運行時就在該區(qū)分配; static靜態(tài)局部變量在程序運行中第一次進入其作用域時在該區(qū)分配。二者都是直到程序運行結(jié)束才
28、被釋放。 局部數(shù)據(jù)區(qū)(棧區(qū)) 存放auto局部變量。 在程序運行到其作用域時在棧區(qū)分配,但怎樣分配在編譯時就已經(jīng)確定。auto局部變量在離開(l ki)其作用域時即被釋放。 動態(tài)數(shù)據(jù)區(qū)(自由存儲區(qū)、堆區(qū)) 存放運行時由 new運算符動態(tài)創(chuàng)建的變量。動態(tài)創(chuàng)建的變量在編譯時無法為它們預定存儲空間,系統(tǒng)根據(jù)運行時的具體要求在該區(qū)進行分配。在該區(qū)的變量必須用 delete運算符才能將其釋放。第21頁/共38頁第二十一頁,共39頁。標識符的作用域標識符的作用域 作用域:指程序中標識符(如變量名、函數(shù)名)的有效使用范圍,即作用范圍。 目的:解決標識符的同名問題。當標識符具有不同的作用域時,允許標識符同名;
29、當標識符的作用域完全相同時,不允許標識符同名。 C+中作用域有五種(w zhn): 塊作用域 文件作用域 函數(shù)原型作用域 函數(shù)作用域 類作用域第22頁/共38頁第二十二頁,共39頁。標識符的作用域標識符的作用域塊作用域塊作用域 塊:指程序中用花括號“ ”括起來的一個程序段,稱為一個塊。 塊作用域:在塊內(nèi)聲明的變量只能在該塊內(nèi)被引用,開始于變量的聲明處,結(jié)束( jish)于塊的結(jié)尾處。 幾條原則: 形參變量的作用域:在其所屬函數(shù)的函數(shù)體塊內(nèi)。 局部變量的作用域:在其所屬的塊內(nèi),該變量的聲明位置之后的那個區(qū)域內(nèi)。 循環(huán)語句 for(表達式1;表達式2;表達式3)中表達式1 所聲明變量的作用域: 在
30、for語句所屬的塊內(nèi),該變量的聲明位置之后的那個區(qū)域內(nèi)。 局部優(yōu)先原則:具有塊作用域的標識符在其作用域內(nèi),將屏蔽其作用塊包含本塊的同名標識符。第23頁/共38頁第二十三頁,共39頁?!纠浚▔K作用域) # include int fun ( int n ) cout “正在(zhngzi)求: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 ) e
31、ndl ; int a = 9 , b = 11 ; cout “第2次調(diào)用:” fun( a ) endl ; cout “第3次調(diào)用:” fun( b ) endl ; cout “第4次調(diào)用:” fun( b ) endl ; 形參 n 作用域局部 s 作用域局部 i 作用域局部 a 作用域局部 a、b 作用域局部 a、b 作用域運行(ynxng):正在求: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第24頁/共38頁第二十四頁,共39頁。【例】(塊作用域)# include void main ( )
32、 int a = 10 , b = 20 , c = 30 ; cout “a=” a “tb=” b “tc=” c endl ; int a = 40 , b = 50 ; c = a + b ; cout “a=” a “tb=” b “tc=” c endl ; cout “a=” a “tb=” b “tc=” c endl ;【例】(塊作用域)# include void main ( ) for ( int a = 1 ; a = 5 ; a+ ) int a = 2 ; cout “a = ” +a endl ; cout “a = ” a endl ; 運行(ynxng):a
33、=10 b=20 c=30 a=40 b=50 c=90 a=10 b=20 c=90 運行(ynxng):a = 3a = 3a = 3a = 3a = 3a = 6第25頁/共38頁第二十五頁,共39頁。標識符的作用域標識符的作用域文件文件(wnjin)(wnjin)作用域作用域 文件作用域:在函數(shù)外聲明的變量可在該文件內(nèi)被引用,開始于變量的聲明處,結(jié)束于文件的結(jié)尾處,即一旦在某個位置定義了全局變量,在其后的整個文件中均可以訪問。 幾條原則: 全局變量作用域從定義處開始到文件結(jié)尾處結(jié)束,遵循(zn xn)聲明在前、使用在后。 當全局變量引用在前、聲明在后時,需先對全局變量作外部聲明。 格式
34、: extern 類型 全局變量名 ; 當全局變量與塊作用域內(nèi)的局部變量同名時,局部變量優(yōu)先。 在塊作用域內(nèi),若要引用同名的全局變量時,可通過域運算符 “ : ” 來引用。 格式: : 全局變量名 第26頁/共38頁第二十六頁,共39頁?!纠浚ㄎ募饔糜颍? include int a = 5 , b ; /a、b定義(dngy)在函數(shù)外,為全局變量extern int c ; /全局變量c引用在前、聲明在后時,需先外部聲明void main ( ) int a = 10 , b = 20 ; /a、b定義(dngy)在函數(shù)內(nèi),為局部變量 cout “a=” a “tb=” b “tc=”
35、c endl ;a = 18 ; :b = :b + 4 ; /引用全局變量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定義(dngy)在函數(shù)外,為全局變量運行(ynxng):a=10 b=20 c=88 a=18 b=20 c=23 a=5 b=4 c=23 第27頁/共38頁第二十七頁,共39頁。標識符的作用域標識符的作用域函數(shù)函數(shù)(hnsh)(hnsh)原型作原型作用域、函數(shù)用域、函數(shù)(hnsh)
36、(hnsh)作用域作用域 函數(shù)原型作用域: 在函數(shù)原型聲明的參數(shù)表中聲明的標識符,所具有的作用域稱為函數(shù)原型作用域,即從其聲明處開始,到函數(shù)原型聲明的結(jié)束處結(jié)束。 函數(shù)原型聲明中所聲明的標識符,其作用域僅在函數(shù)原型聲明的語句內(nèi),因此(ync)與該函數(shù)的定義和調(diào)用均無關,所以在函數(shù)原型聲明中可只作參數(shù)的類型聲明,而省略參數(shù)名。 【例】函數(shù)原型聲明:void swap ( int a , int b ) ; /a、b作用域僅在該句內(nèi) 函數(shù)原型聲明:void swap ( int , int ) ; 函數(shù)作用域: 函數(shù)作用域是指在函數(shù)內(nèi)定義的標識符在其定義的函數(shù)內(nèi)均有效,即不論在函數(shù)內(nèi)的任何地方定義
37、,在整個函數(shù)內(nèi)均可以引用。 C+中只有語句標號具有函數(shù)作用域。第28頁/共38頁第二十八頁,共39頁。變量變量(binling)(binling)的存儲類型和生存期的存儲類型和生存期 存儲類型:變量(binling)的存儲類型反映了變量(binling)占用內(nèi)存空間的期限,它規(guī)定了變量(binling)的生存期,即何時為變量(binling)分配內(nèi)存空間、何時撤消變量(binling)收回為其分配的內(nèi)存空間。 在聲明變量(binling)時,可對其存儲類型進行定義,格式: 存儲類型 類型 變量(binling)名1 = 初值1 ,變量(binling)名2 = 初值2 , ; 其中存儲類型有四
38、種: 自動類型auto 靜態(tài)類型static 寄存器類型register 外部類型extern 當存儲類型省略時,對于局部變量(binling)則表示auto。第29頁/共38頁第二十九頁,共39頁。變量的存儲變量的存儲(cn ch(cn ch) )類型和生存期類型和生存期 auto自動類型變量: 聲明局部變量時,用auto修飾屬自動類型變量,存放在局部數(shù)據(jù)區(qū),即棧區(qū) 。 auto局部變量在程序運行到其作用域時在棧區(qū)分配,在離開其作用域時即被釋放,因此(ync)生存期僅在其作用域內(nèi)。 聲明局部變量時若省略存儲類型,C+編譯器默認為auto。 自動類型變量未初始化時,其初值不確定。 全局變量無自
39、動類型。第30頁/共38頁第三十頁,共39頁。變量變量(binling)(binling)的存儲類型和生存期的存儲類型和生存期 static靜態(tài)類型變量: 聲明局部變量時,用static修飾屬靜態(tài)類型變量,存放在全局數(shù)據(jù)區(qū),即靜態(tài)區(qū) 。 static局部變量的生存期:在程序運行中第一次進入( jnr)其作用域時在靜態(tài)區(qū)分配,離開其作用域時并不釋放,只是不能引用,若程序運行中再次進入( jnr)該static局部變量的作用域,由于該變量已經(jīng)存在,所以不再分配空間,可直接引用。 static局部變量直到程序運行結(jié)束才被釋放。 static局部變量的作用:是保存函數(shù)的運行結(jié)果,以便再次調(diào)用該函數(shù)時,
40、能繼續(xù)使用上次調(diào)用的計算結(jié)果。注意,不在其作用域時,不能直接引用;若需引用,可間接實現(xiàn),即通過該 static 局部變量的地址進行訪問(后續(xù)章節(jié)介紹)。第31頁/共38頁第三十一頁,共39頁。變量的存儲變量的存儲(cn ch(cn ch) )類型和生存期類型和生存期 全局變量聲明時無論前面加或不加static,都具有靜態(tài)生存期,因為全局變量都存放在全局數(shù)據(jù)區(qū),即靜態(tài)區(qū) 。 但用 static 修飾的全局變量,稱為靜態(tài)全局變量。靜態(tài)全局變量與一般的全局變量在形式上類似,但含義有所不同,靜態(tài)全局變量只能在其定義的源文件中有效(該文件中可以有若干個函數(shù)),而在該程序(chngx)的其他源文件中則是無
41、效的;而一般的全局變量可以通過 extern 修飾后,作用于該程序(chngx)的多個源文件。 靜態(tài)類型變量未初始化時,其初值為0。第32頁/共38頁第三十二頁,共39頁。【例】# include int a = 1 , b = 2 ; /a、b為全局變量,在靜態(tài)( jngti)區(qū)int fun ( ) static int a =3 ; /a為靜態(tài)( jngti)局部變量,在靜態(tài)( jngti)區(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 ;運行:a=5 b=6第1次調(diào)用: 7a=5 b=6第2次調(diào)用:11a=5 b=6第3次調(diào)用:15a=5 b=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年服裝、鞋帽加工機械項目建議書
- 2025年種植施肥機械項目合作計劃書
- 2025年C301-I型低壓甲醇合成催化劑項目發(fā)展計劃
- 電子商務物流信息的存儲效率提升
- 員工辦公自動化系統(tǒng)使用指南
- 幼兒園教育故事小熊的圣誕節(jié)
- 2025年DVD播放設備合作協(xié)議書
- Sulfamonomethoxine-sodium-Standard-生命科學試劑-MCE
- 工作解決方案方案
- 藝術(shù)品展覽銷售合作合同
- 如何讓孩子積極參與家務勞動
- 個案護理工作中的病情觀察與風險評估
- 研發(fā)項目的風險識別與應對策略分析方法
- 小學生素質(zhì)發(fā)展報告單
- 供應鏈行業(yè)年終述職報告總結(jié)
- 臨時用地土地復墾方案
- 肝硬化中醫(yī)護理查房
- QAV-1自我監(jiān)查確認表
- 防范非煤礦山典型多發(fā)事故60條措施培訓
- 部編版語文二年級上冊第1單元核心素養(yǎng)教案
- 礦山機電知識培訓課件
評論
0/150
提交評論