版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、主要主要(zhyo)內容內容 函數概述 函數的定義 函數的調用和返回 函數的參數傳遞值傳遞 函數的參數傳遞引用傳遞 函數的原型聲明 全局變量及其作用域 局部變量及其作用域 C+程序的內存布局 標識符的作用域塊作用域、文件作用域、函數原型作用域、函數作用域 變量的存儲類型(lixng)和生存期 函數的調用機制第1頁/共38頁第一頁,共39頁。函數函數(hnsh)(hnsh)概述概述 關于C+函數: C+程序的結構化特點:就是整個程序由一個或多個函數組成,每個函數具有相對獨立的功能,函數之間有明顯的界面,程序整體具有清晰(qngx)的模塊結構,易于修改。 C+函數有兩大類:一類是系統(tǒng)預定義的,稱為
2、庫函數或標準函數,這些庫函數按照不同的功能進行分類,集中定義在不同的頭文件中,用戶只要在自己的程序中包含某個頭文件,就可直接使用該頭文件中定義的函數。另一類是用戶自定義函數,用戶可以根據需要將程序中某個具有相對獨立功能的程序段定義為函數。 C+程序的基本模塊:就是函數,任何一個C+程序均由若干個函數組成,其中有且僅有一個主函數,它是程序執(zhí)行的入口函數, VC+控制臺編程是由用戶定義的main()作為入口函數,Windows編程是由編譯器定義的WinMain()作為入口函數。第2頁/共38頁第二頁,共39頁。函數函數(hnsh)(hnsh)概述概述 C+函數之間是并列(bngli)平等的關系,在
3、程序中的定義位置任意,一個函數可以調用其它函數,也可以被其他函數所調用,但主函數只能調用其他函數,而不能被調用。 函數定義的并列(bngli)關系 函數調用的層次關系void f1( ) f1的函數體 void f2( ) f2的函數體 void main( ) main的函數體 void f3( ) f3的函數體 void f4( ) f4的函數體 void f5( ) f5的函數體 main( )f1( )f2( )f3( )f4( )f6( )第3頁/共38頁第三頁,共39頁。函數函數(hnsh)(hnsh)的定義的定義 函數的定義 : 格式: 返回值類型 函數名 ( 類型1 形參1 ,
4、類型2 形參2 , ,類型n 形參n ) 語句(yj)序列 說明: 返回值類型可以是C+中任意基本數據類型、已定義的構造數據類型; 若函數沒有返回值,則返回值類型定義為 void 型; 若函數返回值類型省略,表示返回值類型為 int 型。函數體函數頭第4頁/共38頁第四頁,共39頁。函數函數(hnsh)(hnsh)的定義的定義 函數名按標識符命名規(guī)則命名,其后括號內定義的是函數的形式參數; 若該函數為無參函數,括號內的 void 通常省略不寫,但括號不能省略! 形式參數表列出所有形式參數的數據類型、參數名稱; 各參數即使類型相同,也必須分別進行類型說明; 形參類型可以是C+中任意基本數據類型、
5、已定義的構造數據類型。函數參數的作用:函數調用時,主調函數通過參數將數據傳遞給被調函數。函數返回(fnhu)值的作用:函數返回(fnhu)時,被調函數可將一個確定的值帶回到主調函數。 若函數有返回(fnhu)值,則 return語句格式為: return 表達式 ; 且 return 后面表達式值的類型必須與函數返回(fnhu)值類型相匹配! 若函數無返回(fnhu)值,則返回(fnhu)值類型定義為void,且return語句格式為: return ;第5頁/共38頁第五頁,共39頁。函數的調用函數的調用(dioyng)(dioyng)和返回和返回 函數的調用 : 格式: 函數名 ( 實參1
6、 ,實參2 , ,實參n ) 調用:就是控制從主調函數轉去執(zhí)行被調函數的函數體。調用時,系統(tǒng)要將實參值按位置傳遞給對應的形參,因此,一般情況下實參與形參在個數、排列順序上都必須一一對應,且類型匹配。 函數的返回 :就是控制從被調函數返回到主調函數的調用點。返回時,即在被調函數中執(zhí)行到 return語句時,若有返回值帶回,則先計算 return語句后面表達式的值,并轉換成所規(guī)定的返回值類型,此時系統(tǒng)會在內存中建立一個臨時變量,用來存放該返回值,待主調函數中包含(bohn)該調用式的表達式語句從該臨時變量中取值后,系統(tǒng)便撤消該臨時變量。第6頁/共38頁第六頁,共39頁?!纠浚ǘx(dngy)求三
7、個實數中最大數的函數max()。)# include float max ( float x , float y , float z ) /要將三個實數傳遞給max()函數,需定義(dngy)三個形參。 float t = yz ? y : z ; return ( xt ? x : t ) ;void main ( ) float a , b , c ; cout a b c ; cout “最大數:” max( a , b , c ) endl ; 運行(ynxng):請輸入三個實數:13 56 -89 最大數:56main()函數調用max( 13, 56, -89 )main()函數的
8、后續(xù)語句函數max( 13, 56, -89 )return 56主調函數被調函數第7頁/共38頁第七頁,共39頁。函數函數(hnsh)(hnsh)的參數傳遞的參數傳遞 形參與實參: 函數定義時,寫在函數頭部參數表中的變量,稱為形式參數(形參)。 函數調用時,寫在調用式參數表中的表達式、變量、常量,稱為實在參數(實參) 形參與實參的結合:編譯時,并不為各函數的形參分配存儲空間,只有在該函數被調用時,其形參才占用存儲空間,并通過堆棧從主調函數中獲得值,這個過程(guchng)稱為形參與實參的結合,一旦函數調用結束,該函數的形參就被撤銷。 函數的參數傳遞方式有三種 : 值傳遞 引用傳遞 地址傳遞第
9、8頁/共38頁第八頁,共39頁。函數函數(hnsh)(hnsh)的參數傳遞的參數傳遞值傳遞值傳遞 值傳遞: 調用函數進行值傳遞時,調用式中對應的實參可以是常量、變量、表達式。 先計算出各個實參表達式的值,并將值賦給對應的形參變量,其過程就是賦值,因此,要求實參值的類型與形參變量類型符合賦值兼容。 由于值傳遞就是賦值傳遞,因此是單向傳遞,即實參值傳遞給形參變量后,若形參變量的值發(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 “調用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “調用后:x = ” x “ty = ” y endl ; 運行:請輸入(shr)兩個整數: 58 97 調用前:x=56 y=97調用后: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頁。函數函數(hnsh)(hnsh)的參數傳遞的參數傳遞引用傳遞引用傳遞 引用類型:是C+中一種特殊的數據
13、類型, 定義引用類型變量,其本質是給一個(y )已定義的變量起一個(y )別名,系統(tǒng)并不為引用類型變量分配內存空間,引用類型變量與其相關聯的變量使用的是同一個(y )內存空間。 引用類型變量的定義: 格式: & = 功能:定義一個(y )引用類型變量,必須同時對其進行初始化,使之與一個(y )已定義過的同類型變量相關聯,即給該已定義過的變量起一個(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頁。函數函數(hnsh)(hnsh)的參數傳遞的參數傳遞引用傳遞引用傳遞 引用類型變量可以作為函數的形參,以實現參數的引用傳遞。 【例】 void swap ( int &a , int &b ) int t = a ; a = b ; b = t ; 引用傳遞: 調用函數時,系統(tǒng)對引用類型的形參是不分配存儲空間的,其本質是給對應的實參變量起一個別名。 進行引用傳遞時,調用式中對應的實參只能(zh nn)是變量。 引用傳遞時傳遞的是變量名,引用類型
15、的形參變量與其相關聯的實參變量使用的是同一個存儲空間,若引用類型的形參變量的值發(fā)生變化,其相關聯的實參變量的值也就隨之變化,因此是雙向傳遞。第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 “調用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “調用后: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 “調用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “調用后:x = ” x “ty = ” y endl ; 運行:調用前:x=5 y=10調用后:x=10 y=5引用傳遞:main(): swap(): x a 10 y b 5510運行:調用前:x=5 y=10調用后:x=5 y=10值傳遞:
17、main(): swap():x a 10y b 5510510第13頁/共38頁第十三頁,共39頁。函數的原型函數的原型(yunxng)(yunxng)聲明聲明 函數的原型聲明: C+中,把函數的定義部分稱為函數的定義性聲明,而把對函數的引用性聲明稱為函數的原型聲明。 當函數定義在前、調用在后時,可直接調用;當函數調用在前、定義在后時,在函數被調用前,必須對被調函數作原型聲明,函數原型聲明可放在主調函數中,也可放在所有函數之外。 函數原型聲明的目的是告知編譯系統(tǒng),該函數的返回值類型、參數個數、順序、各參數的類型,以便編譯系統(tǒng)對其后該函數調用式是否(sh fu)有效進行語法檢查。 函數原型聲明
18、的格式: 格式1: 函數頭 + 末尾加分號 返回值類型 函數名 ( 類型1 形參1 ,類型2 形參2 , ,類型n 形參n ) ; 格式2: 函數頭(去掉形參變量名) + 末尾加分號 返回值類型 函數名 ( 類型1 ,類型2 , ,類型n ) ;第14頁/共38頁第十四頁,共39頁。【例】(輸入一個8位二進制數,將其轉換為十進制數輸出。例:若輸入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()函數的引用性聲明(shngmng),即原型聲明(shngmng) int value = 0 , k ; char c ; cout = 0 ; i- ) cin c ; if ( c = 1 ) value += ( int ) power( 2 , i ) ; /調用power()函數 cout “十進制數:” value endl ; double power ( double x , int n ) /power()函數的定義性聲明(shngmng) double t = 1 ; while ( n- ) t *= x ; return
20、t ; 運行:請輸入(shr)一個8位二進制數:11010001十進制數:209第15頁/共38頁第十五頁,共39頁?!纠浚ㄇ蟮闹?,arctan(x) 用級數計算,直到某項絕對值不大于10-15為止。 )# include # include void main ( ) double a , b ; double arctan ( double x ) ; /arctan()函數的引用性聲明,即原型(yunxng)聲明 a = 16 * arctan ( 1 / 5. ) ; /調用arctan()函數,且如果寫成1/5,結果就都是0 b = 4 * arctan ( 1 / 239.0 )
21、 ; /調用arctan()函數,且如果寫成1/239,結果就都是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 之間的數m,使之滿足m、m2、m3均為回文數。 回文:各位數字左右對稱的整數。例:11、 112=121、113=1331,則輸出11。) 分析:從最低位
22、開始,用除10取余的方法(fngf),依次取出該數的各位數字; 按反序重新構成新的數,若新數與原數完全相等,則原數為回文。# include void main ( ) bool symm ( int n ) ; /symm()函數的引用性聲明,即原型聲明 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()函數的功能是判斷整數n是否
23、是回文 for ( int i=n , m=0 ; i != 0 ; i = i/10 ) m = m*10 + i%10 ; / m是新構的數 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)用級數計算,計算精度為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 )變量要被多個函數所訪問,可將其定義為全局變量。 全局變量:指定義在函數之外的變量。 作用域:全局變量可以定義在函數外的任何位置,一旦在某個(mu )位置定義了全局變量,其后的任何函數均可以訪問該全局變量。 存儲類型:全局變量存放在全局數據區(qū)(靜態(tài)區(qū)),分配該區(qū)時內
26、存自動初始化為0,因此全局變量若不做初始化,其初值為0。 生存期:全局變量在程序開始運行時就在全局區(qū)分配,程序運行結束才被釋放。第19頁/共38頁第十九頁,共39頁。局部變量及其作用域局部變量及其作用域 關于局部變量: 塊的概念:指程序中用花括號“ ”括起來的一個程序段,稱為一個塊。 局部變量:指定義(dngy)在函數之內或某個塊內的變量。 作用域:局部變量可以定義(dngy)在塊內的任何位置,一旦在塊內的某個位置定義(dngy)了局部變量,只能在該塊內該位置之后的那個區(qū)域內才可以訪問該局部變量。 存儲類型:auto自動類型局部變量、static靜態(tài)類型局部變量。 auto自動局部變量:存放在
27、局部數據區(qū)(棧區(qū)),分配棧區(qū)時內存不做初始化,因此auto局部變量若不做初始化,其初值不確定。 static靜態(tài)局部變量:存放在全局數據區(qū)(靜態(tài)區(qū)), 分配該區(qū)時內存自動初始化為0,因此static局部變量若不做初始化,其初值為0。第20頁/共38頁第二十頁,共39頁。C+C+程序的內存程序的內存(ni cn)(ni cn)布局布局 操作系統(tǒng)為一個C+程序運行定義了四個內存區(qū)域: 代碼區(qū)存放程序代碼。 全局數據區(qū)(靜態(tài)區(qū))存放全局變量、static靜態(tài)局部變量。全局變量在程序開始運行時就在該區(qū)分配; static靜態(tài)局部變量在程序運行中第一次進入其作用域時在該區(qū)分配。二者都是直到程序運行結束才
28、被釋放。 局部數據區(qū)(棧區(qū)) 存放auto局部變量。 在程序運行到其作用域時在棧區(qū)分配,但怎樣分配在編譯時就已經確定。auto局部變量在離開(l ki)其作用域時即被釋放。 動態(tài)數據區(qū)(自由存儲區(qū)、堆區(qū)) 存放運行時由 new運算符動態(tài)創(chuàng)建的變量。動態(tài)創(chuàng)建的變量在編譯時無法為它們預定存儲空間,系統(tǒng)根據運行時的具體要求在該區(qū)進行分配。在該區(qū)的變量必須用 delete運算符才能將其釋放。第21頁/共38頁第二十一頁,共39頁。標識符的作用域標識符的作用域 作用域:指程序中標識符(如變量名、函數名)的有效使用范圍,即作用范圍。 目的:解決標識符的同名問題。當標識符具有不同的作用域時,允許標識符同名;
29、當標識符的作用域完全相同時,不允許標識符同名。 C+中作用域有五種(w zhn): 塊作用域 文件作用域 函數原型作用域 函數作用域 類作用域第22頁/共38頁第二十二頁,共39頁。標識符的作用域標識符的作用域塊作用域塊作用域 塊:指程序中用花括號“ ”括起來的一個程序段,稱為一個塊。 塊作用域:在塊內聲明的變量只能在該塊內被引用,開始于變量的聲明處,結束( jish)于塊的結尾處。 幾條原則: 形參變量的作用域:在其所屬函數的函數體塊內。 局部變量的作用域:在其所屬的塊內,該變量的聲明位置之后的那個區(qū)域內。 循環(huán)語句 for(表達式1;表達式2;表達式3)中表達式1 所聲明變量的作用域: 在
30、for語句所屬的塊內,該變量的聲明位置之后的那個區(qū)域內。 局部優(yōu)先原則:具有塊作用域的標識符在其作用域內,將屏蔽其作用塊包含本塊的同名標識符。第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次調用:” fun( a ) e
31、ndl ; int a = 9 , b = 11 ; cout “第2次調用:” fun( a ) endl ; cout “第3次調用:” fun( b ) endl ; cout “第4次調用:” fun( b ) endl ; 形參 n 作用域局部 s 作用域局部 i 作用域局部 a 作用域局部 a、b 作用域局部 a、b 作用域運行(ynxng):正在求:1+2+5第1次調用:15正在求:1+2+9第2次調用:45正在求:1+2+11第3次調用:66正在求:1+2+7第4次調用:28第24頁/共38頁第二十四頁,共39頁?!纠浚▔K作用域)# 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)作用域作用域 文件作用域:在函數外聲明的變量可在該文件內被引用,開始于變量的聲明處,結束于文件的結尾處,即一旦在某個位置定義了全局變量,在其后的整個文件中均可以訪問。 幾條原則: 全局變量作用域從定義處開始到文件結尾處結束,遵循(zn xn)聲明在前、使用在后。 當全局變量引用在前、聲明在后時,需先對全局變量作外部聲明。 格式
34、: extern 類型 全局變量名 ; 當全局變量與塊作用域內的局部變量同名時,局部變量優(yōu)先。 在塊作用域內,若要引用同名的全局變量時,可通過域運算符 “ : ” 來引用。 格式: : 全局變量名 第26頁/共38頁第二十六頁,共39頁?!纠浚ㄎ募饔糜颍? include int a = 5 , b ; /a、b定義(dngy)在函數外,為全局變量extern int c ; /全局變量c引用在前、聲明在后時,需先外部聲明void main ( ) int a = 10 , b = 20 ; /a、b定義(dngy)在函數內,為局部變量 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)在函數外,為全局變量運行(ynxng):a=10 b=20 c=88 a=18 b=20 c=23 a=5 b=4 c=23 第27頁/共38頁第二十七頁,共39頁。標識符的作用域標識符的作用域函數函數(hnsh)(hnsh)原型作原型作用域、函數用域、函數(hnsh)
36、(hnsh)作用域作用域 函數原型作用域: 在函數原型聲明的參數表中聲明的標識符,所具有的作用域稱為函數原型作用域,即從其聲明處開始,到函數原型聲明的結束處結束。 函數原型聲明中所聲明的標識符,其作用域僅在函數原型聲明的語句內,因此(ync)與該函數的定義和調用均無關,所以在函數原型聲明中可只作參數的類型聲明,而省略參數名。 【例】函數原型聲明:void swap ( int a , int b ) ; /a、b作用域僅在該句內 函數原型聲明:void swap ( int , int ) ; 函數作用域: 函數作用域是指在函數內定義的標識符在其定義的函數內均有效,即不論在函數內的任何地方定義
37、,在整個函數內均可以引用。 C+中只有語句標號具有函數作用域。第28頁/共38頁第二十八頁,共39頁。變量變量(binling)(binling)的存儲類型和生存期的存儲類型和生存期 存儲類型:變量(binling)的存儲類型反映了變量(binling)占用內存空間的期限,它規(guī)定了變量(binling)的生存期,即何時為變量(binling)分配內存空間、何時撤消變量(binling)收回為其分配的內存空間。 在聲明變量(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修飾屬自動類型變量,存放在局部數據區(qū),即棧區(qū) 。 auto局部變量在程序運行到其作用域時在棧區(qū)分配,在離開其作用域時即被釋放,因此(ync)生存期僅在其作用域內。 聲明局部變量時若省略存儲類型,C+編譯器默認為auto。 自動類型變量未初始化時,其初值不確定。 全局變量無自
39、動類型。第30頁/共38頁第三十頁,共39頁。變量變量(binling)(binling)的存儲類型和生存期的存儲類型和生存期 static靜態(tài)類型變量: 聲明局部變量時,用static修飾屬靜態(tài)類型變量,存放在全局數據區(qū),即靜態(tài)區(qū) 。 static局部變量的生存期:在程序運行中第一次進入( jnr)其作用域時在靜態(tài)區(qū)分配,離開其作用域時并不釋放,只是不能引用,若程序運行中再次進入( jnr)該static局部變量的作用域,由于該變量已經存在,所以不再分配空間,可直接引用。 static局部變量直到程序運行結束才被釋放。 static局部變量的作用:是保存函數的運行結果,以便再次調用該函數時,
40、能繼續(xù)使用上次調用的計算結果。注意,不在其作用域時,不能直接引用;若需引用,可間接實現,即通過該 static 局部變量的地址進行訪問(后續(xù)章節(jié)介紹)。第31頁/共38頁第三十一頁,共39頁。變量的存儲變量的存儲(cn ch(cn ch) )類型和生存期類型和生存期 全局變量聲明時無論前面加或不加static,都具有靜態(tài)生存期,因為全局變量都存放在全局數據區(qū),即靜態(tài)區(qū) 。 但用 static 修飾的全局變量,稱為靜態(tài)全局變量。靜態(tài)全局變量與一般的全局變量在形式上類似,但含義有所不同,靜態(tài)全局變量只能在其定義的源文件中有效(該文件中可以有若干個函數),而在該程序(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 “次調用:” fun( ) endl ; cout “a=” a “tb=” b endl ; cout “a=” :a “tb=” :b endl ;運行:a=5 b=6第1次調用: 7a=5 b=6第2次調用:11a=5 b=6第3次調用:15a=5 b=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇州拙政園課件
- 2024-2025學年初中同步測控優(yōu)化設計物理八年級下冊配人教版第八章測評(A)含答案
- 一年級數學上冊??家族e填空100道
- 西京學院《機械設計基礎》2021-2022學年第一學期期末試卷
- 西京學院《國際貨運代理與報關實務》2021-2022學年第一學期期末試卷
- 西京學院《大數據技術原理及應用》2021-2022學年期末試卷
- 小兔搬家 課件
- 西華師范大學《外國音樂史與名作賞析》2023-2024學年第一學期期末試卷
- 西華師范大學《數據庫系統(tǒng)原理》2022-2023學年期末試卷
- 西華師范大學《幾何學基礎》2022-2023學年第一學期期末試卷
- 抗帕金森病藥物 課件
- A5技術支持的課堂導入作業(yè)2-課堂導入設計:小學數學《圓的面積》針對選定的主題請?zhí)峤灰环葸\用信息技術手段支持的課堂導入設計須清晰地說明導入目的和媒體資源工具
- 員工頂崗的管理規(guī)定
- 手性藥物課件
- 企業(yè)合規(guī)管理課件
- 新能源小客車購車充電條件確認書
- 小學音樂-《我是小小音樂家》教學課件設計
- 無肝素透析的護理課件-2
- 每日消防安全巡查記錄表
- 三角函數知識點復習總結填空
- 大學鋼琴即興伴奏教案
評論
0/150
提交評論