程序設(shè)計基礎(chǔ)第7章ppt課件_第1頁
程序設(shè)計基礎(chǔ)第7章ppt課件_第2頁
程序設(shè)計基礎(chǔ)第7章ppt課件_第3頁
程序設(shè)計基礎(chǔ)第7章ppt課件_第4頁
程序設(shè)計基礎(chǔ)第7章ppt課件_第5頁
已閱讀5頁,還剩64頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C/C+言語言語 程程 序序 設(shè)設(shè) 計計第第5 5章章 函數(shù)和存儲類函數(shù)和存儲類學(xué)習(xí)目的:學(xué)習(xí)目的:熟練掌握函數(shù)的定義、聲明、前往、調(diào)用熟練掌握函數(shù)的定義、聲明、前往、調(diào)用 熟練掌握值調(diào)用、傳值指針調(diào)用和援用調(diào)用熟練掌握值調(diào)用、傳值指針調(diào)用和援用調(diào)用 了解變量的作用域與存儲類了解變量的作用域與存儲類 了解遞歸函數(shù)的概念與運用方法了解遞歸函數(shù)的概念與運用方法了解函數(shù)指針的概念與運用方法了解函數(shù)指針的概念與運用方法掌握自定義函數(shù)的調(diào)試方法掌握自定義函數(shù)的調(diào)試方法 5.1 函數(shù)的根本概念函數(shù)的根本概念q 一個較大的程序普通應(yīng)分為假設(shè)干個程序模塊,一個較大的程序普通應(yīng)分為假設(shè)干個程序模塊,每一個模塊用

2、來實現(xiàn)一個特定的功能。一切的高每一個模塊用來實現(xiàn)一個特定的功能。一切的高級言語中都有子程序這個概念,用子程序來實現(xiàn)級言語中都有子程序這個概念,用子程序來實現(xiàn)模塊的功能。函數(shù),就是子程序的一種最常見方模塊的功能。函數(shù),就是子程序的一種最常見方式。式。 q 一個一個C C程序可由一個主函數(shù)和假設(shè)干個函數(shù)程序可由一個主函數(shù)和假設(shè)干個函數(shù)構(gòu)成。由主函數(shù)調(diào)用其它函數(shù),其它函數(shù)也可以構(gòu)成。由主函數(shù)調(diào)用其它函數(shù),其它函數(shù)也可以相互調(diào)用。相互調(diào)用。q 同一個函數(shù)可以被一個或多個函數(shù)調(diào)用恣意多次。同一個函數(shù)可以被一個或多個函數(shù)調(diào)用恣意多次。q 要擅長利用函數(shù),以減少反復(fù)編寫程序段的任務(wù)要擅長利用函數(shù),以減少反復(fù)

3、編寫程序段的任務(wù)量。量。一個程序中函數(shù)調(diào)用的表示圖一個程序中函數(shù)調(diào)用的表示圖mainahbcgfedhieg例題:編寫程序,實現(xiàn)功能:輸入兩個非例題:編寫程序,實現(xiàn)功能:輸入兩個非0整數(shù)整數(shù)a和和b,然后,然后求得求得ab和和ba并輸出結(jié)果。并輸出結(jié)果。#include void main() int a,b,i; float c; cout a b; c = 1; if (b 0) /指數(shù)為負(fù)整數(shù)指數(shù)為負(fù)整數(shù) for (i = 1; i = -b; i +) c = c * a; c = 1 / c; else /指數(shù)為正整數(shù)指數(shù)為正整數(shù) for (i = 1; i = b; i +) c

4、= c * a; couta 的的b次方是次方是c ; c = 1; if (a 0) /指數(shù)為負(fù)整數(shù)指數(shù)為負(fù)整數(shù) for (i = 1; i = -a; i +) c = c * b; c = 1 / c; else /指數(shù)為正整數(shù)指數(shù)為正整數(shù) for (i = 1; i = a; i +) c = c * b; coutb的的a次方是次方是c endl; 在上面程序中,計算在上面程序中,計算abab和和baba各有一段程序,這兩段程序各有一段程序,這兩段程序極其類似,僅僅是極其類似,僅僅是a a和和b b交換位置??梢园哑渲幸欢翁崛〕鰜恚粨Q位置??梢园哑渲幸欢翁崛〕鰜恚瑯?gòu)成一個名為構(gòu)成一

5、個名為f f的函數(shù)。的函數(shù)。 #include float f(int x, int y) /形參形參x、y int i; float r; r = 1; if (y 0) /指數(shù)為負(fù)整數(shù)指數(shù)為負(fù)整數(shù) for (i = 1; i = -y; i +) r = r * x; r = 1 / r; else /指數(shù)為正整數(shù)指數(shù)為正整數(shù) for (i = 1; i = y; i +) r = r * x; return r; void main() int a,b; float c; cout a b; c = f( a, b ); /調(diào)用函數(shù)時,為實參調(diào)用函數(shù)時,為實參a、bcout a的的b次方

6、是次方是c ; c = f( b, a ); cout b的的a次方是次方是cendl; 函數(shù)函數(shù)f f的函數(shù)體包含著計算的函數(shù)體包含著計算xyxy的程序,函數(shù)首部的的程序,函數(shù)首部的“f(int x, int y)f(int x, int y)從方式到含義都與數(shù)學(xué)中的函數(shù)從方式到含義都與數(shù)學(xué)中的函數(shù)f(x,y)f(x,y)類似,類似,f f是函數(shù)名,括號中的是函數(shù)名,括號中的x x和和y y在數(shù)學(xué)中稱為自變量,在在數(shù)學(xué)中稱為自變量,在函數(shù)首部中稱為參數(shù)。在數(shù)學(xué)中,用詳細(xì)的值代入自變量,函數(shù)首部中稱為參數(shù)。在數(shù)學(xué)中,用詳細(xì)的值代入自變量,就確定了函數(shù)值,在程序中,用詳細(xì)的值就確定了函數(shù)值,在程

7、序中,用詳細(xì)的值a a、b b或或b b、a a“代入代入?yún)?shù),就能算出函數(shù)值。與數(shù)學(xué)稍有不同的是參數(shù)和函數(shù)參數(shù),就能算出函數(shù)值。與數(shù)學(xué)稍有不同的是參數(shù)和函數(shù)值都要指明類型。值都要指明類型。 主函數(shù)的執(zhí)行部分主函數(shù)的執(zhí)行部分函數(shù)函數(shù)f f的執(zhí)行部分的執(zhí)行部分利用系統(tǒng)函數(shù)利用系統(tǒng)函數(shù)pow,計算乘冪,計算乘冪 #include #include void main() int a,b; float c; cout a b; c = pow( a, b ); cout a 的的 b 次方是次方是 c ; c = pow( b, a ); cout b 的的 a 次方是次方是 c y?x:y; re

8、turn(z); 例例 無參函數(shù)無參函數(shù) printstar( ) printf(“*n); 或或 printstar(void ) printf(“*n); 例例 有參函數(shù)有參函數(shù) int max(int x,int y) int z; z=xy?x:y; return(z); 5.2函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用合法標(biāo)識符合法標(biāo)識符函數(shù)前往值函數(shù)前往值類型類型缺省缺省int型型無前往值無前往值void函數(shù)體函數(shù)體類型標(biāo)識符函數(shù)名形參表類型標(biāo)識符函數(shù)名形參表闡明語句部分闡明語句部分普通格式普通格式:例例 空函數(shù)空函數(shù) dummy( ) 函數(shù)體為空函數(shù)體為空類型標(biāo)識符表示函數(shù)值的數(shù)據(jù)類型,類

9、型標(biāo)識符表示函數(shù)值的數(shù)據(jù)類型, 當(dāng)函數(shù)有前往值時,當(dāng)函數(shù)有前往值時,在函數(shù)名的前面應(yīng)加上前往值的類型闡明。象前面出現(xiàn)在函數(shù)名的前面應(yīng)加上前往值的類型闡明。象前面出現(xiàn)過的主函數(shù)那樣,只執(zhí)行一系列語句,不要求函數(shù)產(chǎn)生過的主函數(shù)那樣,只執(zhí)行一系列語句,不要求函數(shù)產(chǎn)生前往值的,類型標(biāo)識符是前往值的,類型標(biāo)識符是void (或或void main(void) 。當(dāng)函數(shù)的前往值為整型時,函數(shù)名前的數(shù)據(jù)類型當(dāng)函數(shù)的前往值為整型時,函數(shù)名前的數(shù)據(jù)類型int可可以省略。以省略。 形參表中列出函數(shù)的全部參數(shù),中間用逗號分隔。每個形參表中列出函數(shù)的全部參數(shù),中間用逗號分隔。每個參數(shù)除了參數(shù)名外,還要指定數(shù)據(jù)類型,例

10、如:參數(shù)除了參數(shù)名外,還要指定數(shù)據(jù)類型,例如:(int x,int y)之所以稱為形參,是由于它們還沒有真實的值。之所以稱為形參,是由于它們還沒有真實的值。形參表中的每個參數(shù)都有雙重的作用:對外,表示一形參表中的每個參數(shù)都有雙重的作用:對外,表示一個個在調(diào)用函數(shù)時需求在調(diào)用函數(shù)時需求“代入的位置;對內(nèi),相當(dāng)于聲明代入的位置;對內(nèi),相當(dāng)于聲明了了一個變量,在函數(shù)體中可以直接運用這個變量。一個變量,在函數(shù)體中可以直接運用這個變量。 假設(shè)形參的數(shù)據(jù)類型是一維數(shù)組,那么方括號中的元素假設(shè)形參的數(shù)據(jù)類型是一維數(shù)組,那么方括號中的元素個數(shù)可以空缺。個數(shù)可以空缺。實參可以是常量、變量或表達(dá)式,如實參可以是常

11、量、變量或表達(dá)式,如max(3,a+b);但要求它們有確定的值。在調(diào)用時將實參的值賦給形但要求它們有確定的值。在調(diào)用時將實參的值賦給形參參變量假設(shè)形參是數(shù)組名,那么傳送的是數(shù)組首地址而變量假設(shè)形參是數(shù)組名,那么傳送的是數(shù)組首地址而不不是變量的值。是變量的值。沒有參數(shù)的函數(shù)沒有形參表,但一對圓括號不能短少,沒有參數(shù)的函數(shù)沒有形參表,但一對圓括號不能短少,前面出現(xiàn)過的主函數(shù)都是這樣的函數(shù)。前面出現(xiàn)過的主函數(shù)都是這樣的函數(shù)。函數(shù)體的格式與主函數(shù)沒有差別,都寫在函數(shù)體的格式與主函數(shù)沒有差別,都寫在和和之間。之間??梢杂锌梢杂小翱蘸瘮?shù),它的方式為:空函數(shù),它的方式為:類型標(biāo)識符類型標(biāo)識符 函數(shù)名函數(shù)名

12、調(diào)用此函數(shù)時,什么任務(wù)也不做,沒有任何實踐調(diào)用此函數(shù)時,什么任務(wù)也不做,沒有任何實踐作作用。用作今后函數(shù)功能的擴(kuò)展。用。用作今后函數(shù)功能的擴(kuò)展。5.2.2函數(shù)的調(diào)用函數(shù)的調(diào)用函數(shù)調(diào)用的普通方式是函數(shù)調(diào)用的普通方式是 函數(shù)名函數(shù)名(實參表實參表) 實參表中列出實踐實參表中列出實踐“代入的參數(shù),參數(shù)的個數(shù)、代入的參數(shù),參數(shù)的個數(shù)、次序該當(dāng)與形參表所列的一致,中間用逗號分隔。次序該當(dāng)與形參表所列的一致,中間用逗號分隔。每個實參都是一個表達(dá)式,表達(dá)式的類型必需與對每個實參都是一個表達(dá)式,表達(dá)式的類型必需與對應(yīng)形參的類型兼容。應(yīng)形參的類型兼容。 假設(shè)參數(shù)個數(shù)為假設(shè)參數(shù)個數(shù)為0,實參表是空的,但一對括號依

13、,實參表是空的,但一對括號依然要有,調(diào)用庫函數(shù)然要有,調(diào)用庫函數(shù)getch、getche時就是這樣。時就是這樣。 函數(shù)調(diào)用作為表達(dá)式,可以出如今程序中任何允許函數(shù)調(diào)用作為表達(dá)式,可以出如今程序中任何允許出現(xiàn)表達(dá)式的場所。例如:出現(xiàn)表達(dá)式的場所。例如: c = f(a,b); cout a 的的 b 次方是次方是 c; 或合并成一句或合并成一句 cout a 的的 b 次方是次方是 f(a,b); 又如又如 c = max(f(a,b),f(b,a); /max是調(diào)用另一個函數(shù),是調(diào)用另一個函數(shù),f(a,b)和和f(b,a)作為作為函數(shù)函數(shù)max的兩個實參的兩個實參 5.2.3函數(shù)的聲明函數(shù)的聲

14、明函數(shù)可以先定義后調(diào)用,也可以調(diào)用的函數(shù)出函數(shù)可以先定義后調(diào)用,也可以調(diào)用的函數(shù)出如今函數(shù)定義之前,即先調(diào)用,后定義。這樣做的如今函數(shù)定義之前,即先調(diào)用,后定義。這樣做的益處是使整個源程序呈現(xiàn)主干在前、枝節(jié)在后的構(gòu)益處是使整個源程序呈現(xiàn)主干在前、枝節(jié)在后的構(gòu)造,便于閱讀和了解。造,便于閱讀和了解。 假設(shè)函數(shù)假設(shè)函數(shù)a調(diào)用函數(shù)調(diào)用函數(shù)b,并且函數(shù),并且函數(shù)b的定義出如的定義出如今函數(shù)今函數(shù)a之后,那么,在函數(shù)之后,那么,在函數(shù)a初次調(diào)用初次調(diào)用b之前,必之前,必需先對函數(shù)需先對函數(shù)b加以闡明,這就是函數(shù)聲明函數(shù)原加以闡明,這就是函數(shù)聲明函數(shù)原型。型。函數(shù)聲明的普通方式是函數(shù)聲明的普通方式是 類型

15、標(biāo)識符類型標(biāo)識符 函數(shù)名形參表;函數(shù)名形參表; 函數(shù)聲明與后面函數(shù)定義中的函數(shù)首部相比:函數(shù)聲明與后面函數(shù)定義中的函數(shù)首部相比: 1、兩者的函數(shù)名、函數(shù)類型完全一樣。、兩者的函數(shù)名、函數(shù)類型完全一樣。 2、兩者中形參的數(shù)量、次序、類型完全一致、兩者中形參的數(shù)量、次序、類型完全一致 。3、函數(shù)聲明中的形參名字沒有任何作用,可與、函數(shù)聲明中的形參名字沒有任何作用,可與函數(shù)函數(shù)定義中的形參名字一樣,也可不同,甚定義中的形參名字一樣,也可不同,甚至可完全省略。至可完全省略。4、函數(shù)聲明以分號終了,而函數(shù)首部不能有分、函數(shù)聲明以分號終了,而函數(shù)首部不能有分號。號。 假設(shè)函數(shù)假設(shè)函數(shù)a調(diào)用函數(shù)調(diào)用函數(shù)bb

16、的函數(shù)聲明寫在函數(shù)的函數(shù)聲明寫在函數(shù)a的的聲明部分聲明部分,只對函數(shù)只對函數(shù)a中的調(diào)中的調(diào)用有效用有效.void a() void b(); void b() b的函數(shù)聲明寫在函數(shù)的函數(shù)聲明寫在函數(shù)a的定的定義之外義之外,使位于聲明之后的使位于聲明之后的一切函數(shù)都能調(diào)用函數(shù)一切函數(shù)都能調(diào)用函數(shù)b。 void b(); void a() void b() 1、首先被調(diào)用的函數(shù)必需是曾經(jīng)存在的函數(shù)是庫函、首先被調(diào)用的函數(shù)必需是曾經(jīng)存在的函數(shù)是庫函數(shù)或用戶本人定義的函數(shù),假設(shè)運用庫函數(shù),普通要數(shù)或用戶本人定義的函數(shù),假設(shè)運用庫函數(shù),普通要在本文件開頭添加預(yù)處置命令。在本文件開頭添加預(yù)處置命令。2、假

17、設(shè)運用用戶本人定義的函數(shù),而且該函數(shù)與調(diào)用、假設(shè)運用用戶本人定義的函數(shù),而且該函數(shù)與調(diào)用它的函數(shù)即主調(diào)函數(shù)在同一個文件中,普通還應(yīng)它的函數(shù)即主調(diào)函數(shù)在同一個文件中,普通還應(yīng)該在主調(diào)函數(shù)對被調(diào)用函數(shù)的前往值的類型作闡明。該在主調(diào)函數(shù)對被調(diào)用函數(shù)的前往值的類型作闡明。函數(shù)聲明與函數(shù)定義是兩個不同的概念。函數(shù)聲明只闡函數(shù)聲明與函數(shù)定義是兩個不同的概念。函數(shù)聲明只闡明函數(shù)的外在特性:調(diào)用時需求多少參數(shù),分別是什么類型,明函數(shù)的外在特性:調(diào)用時需求多少參數(shù),分別是什么類型,前往的函數(shù)值是什么類型。而函數(shù)定義是對一個函數(shù)的完好前往的函數(shù)值是什么類型。而函數(shù)定義是對一個函數(shù)的完好描畫,不但闡明外在特性,而且

18、闡明函數(shù)的功能怎樣實現(xiàn)。描畫,不但闡明外在特性,而且闡明函數(shù)的功能怎樣實現(xiàn)。因此,當(dāng)函數(shù)定義出如今函數(shù)調(diào)用之前時,不用再有函數(shù)聲因此,當(dāng)函數(shù)定義出如今函數(shù)調(diào)用之前時,不用再有函數(shù)聲明,而即使有了函數(shù)聲明,函數(shù)定義也不能短少。明,而即使有了函數(shù)聲明,函數(shù)定義也不能短少。闡明:闡明:5.3函數(shù)的前往值及其類型函數(shù)的前往值及其類型前往語句的普通格式是前往語句的普通格式是 return 表達(dá)式表達(dá)式 ;或或 return 表達(dá)式;表達(dá)式; 功能:終了函數(shù)的執(zhí)行,并且將表達(dá)式的值作為函功能:終了函數(shù)的執(zhí)行,并且將表達(dá)式的值作為函數(shù)的值帶回給調(diào)用者。數(shù)的值帶回給調(diào)用者。 留意:留意:函數(shù)中可有多個函數(shù)中可

19、有多個return語句。語句。假設(shè)無假設(shè)無return語句,遇語句,遇時,自動前往調(diào)用函數(shù)。時,自動前往調(diào)用函數(shù)。C言語允許在沒有前往值的函數(shù)中運用言語允許在沒有前往值的函數(shù)中運用return語句,語句,以便立刻終了函數(shù)的執(zhí)行,將程序的執(zhí)行流程前往以便立刻終了函數(shù)的執(zhí)行,將程序的執(zhí)行流程前往到調(diào)用函數(shù)中。到調(diào)用函數(shù)中。l函數(shù)值的類型。既然函數(shù)有前往值,這個值當(dāng)然應(yīng)屬于某函數(shù)值的類型。既然函數(shù)有前往值,這個值當(dāng)然應(yīng)屬于某一個確定的類型,該當(dāng)在定義函數(shù)時指定函數(shù)值的類型。一個確定的類型,該當(dāng)在定義函數(shù)時指定函數(shù)值的類型。l例如:例如:int max(float x,float y)/函數(shù)值為整函數(shù)

20、值為整型型l char letter(char c1,char c2)/函數(shù)值為字函數(shù)值為字符型符型l凡不加類型闡明的函數(shù),一概自動按整型處置。凡不加類型闡明的函數(shù),一概自動按整型處置。l假設(shè)函數(shù)值類型和假設(shè)函數(shù)值類型和return語句中表達(dá)式的值不一致,那么語句中表達(dá)式的值不一致,那么以函數(shù)類型為準(zhǔn)。對數(shù)值型數(shù)據(jù),可自動進(jìn)展類型轉(zhuǎn)換。以函數(shù)類型為準(zhǔn)。對數(shù)值型數(shù)據(jù),可自動進(jìn)展類型轉(zhuǎn)換。即函數(shù)類型決議前往值的類型。假設(shè)函數(shù)的類型為即函數(shù)類型決議前往值的類型。假設(shè)函數(shù)的類型為float ,定義定義return值的類型為值的類型為intlwarning : return : conversion f

21、rom int to float, possible loss of datal假設(shè)被調(diào)用函數(shù)中沒有假設(shè)被調(diào)用函數(shù)中沒有return語句,并不帶回一個確定的、語句,并不帶回一個確定的、用戶所希望得到的函數(shù)值,但實踐上,函數(shù)并不是不帶回用戶所希望得到的函數(shù)值,但實踐上,函數(shù)并不是不帶回值,而只是不帶回有用的值,帶回的是一個不確定的值。值,而只是不帶回有用的值,帶回的是一個不確定的值。l為了明確表示為了明確表示“不帶回值,可以用不帶回值,可以用“void定義定義“無類型無類型或稱或稱“空類型。空類型。例例54編一程序,求編一程序,求s=1+2233nn/分析:程序?qū)⒎治觯撼绦驅(qū)作為函數(shù)參數(shù),函數(shù)

22、計算結(jié)果經(jīng)過作為函數(shù)參數(shù),函數(shù)計算結(jié)果經(jīng)過return語句前往調(diào)用程序,再累加到變量語句前往調(diào)用程序,再累加到變量s中。中。#include long power(int n)int i;long t=1;for(i=1;in;for(i=1;i=n;i+)s+=power(i);coutsy?x:y; return(z); 例例 比較兩個數(shù)并輸出大者比較兩個數(shù)并輸出大者#include int max(int x,int y); void main() int a,b,c;cinab; c=max(a,b); coutMax is cy?x:y; return(z);形參形參實參實參闡明:闡

23、明: 實參必需有確定的值實參必需有確定的值 形參必需指定類型形參必需指定類型 形參與實參類型一致,個數(shù)一樣形參與實參類型一致,個數(shù)一樣 假設(shè)形參與實參類型不一致,自動按形參類型轉(zhuǎn)換假設(shè)形參與實參類型不一致,自動按形參類型轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換 形參在函數(shù)被調(diào)用前不占內(nèi)存形參在函數(shù)被調(diào)用前不占內(nèi)存;函數(shù)調(diào)用時為形參分配內(nèi)存;調(diào)用終函數(shù)調(diào)用時為形參分配內(nèi)存;調(diào)用終了,內(nèi)存釋放了,內(nèi)存釋放參數(shù)傳送方式參數(shù)傳送方式值傳送值傳送方式:函數(shù)調(diào)用時方式:函數(shù)調(diào)用時,為形參分配單元為形參分配單元,并將實參并將實參的值復(fù)制到形參中;調(diào)用終了,形參單元被的值復(fù)制到形參中;調(diào)用終了,形參單元被釋放,實參單元仍

24、保管并維持原值釋放,實參單元仍保管并維持原值特點:特點:形參與實參占用不同的內(nèi)存單元形參與實參占用不同的內(nèi)存單元單向傳送單向傳送711x:y:調(diào)用前:調(diào)用前:調(diào)用終了:調(diào)用終了:711x:y:例例 交換兩個數(shù)交換兩個數(shù)#include void swap(int a,int b) int temp; temp=a; a=b; b=temp; couta=atb=bendl;void main() int x=7,y=11; coutx=xty=yendl; coutswapped:endl; swap(x,y); coutx=xty=yendl;調(diào)用:調(diào)用:711a:b:711x:y:swap

25、:711x:y:117a:b:temp11117地址傳送地址傳送方式:函數(shù)調(diào)用時,將數(shù)據(jù)的存儲地址作為參數(shù)方式:函數(shù)調(diào)用時,將數(shù)據(jù)的存儲地址作為參數(shù)傳送給形參傳送給形參特點:特點:形參與實參占用同樣的存儲單元形參與實參占用同樣的存儲單元“雙向傳送雙向傳送實參和形參必需是地址常量或變量實參和形參必需是地址常量或變量#include void swap(int *p1,int *p2) int p; p=*p1; *p1=*p2; *p2=p;void main() int x=7,y=11; coutx=xty=yendl; coutswapped:endl; swap(&x,&

26、y); coutx=xty=yendl;例例 交換兩個數(shù)交換兩個數(shù)a59b調(diào)前:調(diào)前:a59b調(diào)調(diào)swap:p1&a&bp2a95b交換:交換:p1&a&bp2a95b前往:前往:數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)實參數(shù)組元素作函數(shù)實參與變量作實參一樣,是單向傳送,與變量作實參一樣,是單向傳送,“值傳送值傳送方式。在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中方式。在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中的存儲單元。只需在發(fā)生調(diào)用時函數(shù)中的形參才的存儲單元。只需在發(fā)生調(diào)用時函數(shù)中的形參才被分配內(nèi)存單元。在調(diào)用終了后,形參所占的內(nèi)被分配內(nèi)存單元。在調(diào)用終了后,形參所

27、占的內(nèi)存單元也被釋放。形參的值假設(shè)發(fā)生改動,并不存單元也被釋放。形參的值假設(shè)發(fā)生改動,并不會改動主調(diào)函數(shù)的實參的值。會改動主調(diào)函數(shù)的實參的值。數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)時,是數(shù)組名作函數(shù)參數(shù)時,是“地址傳送,是把地址傳送,是把實參數(shù)組的起始地址傳送給形參數(shù)組,兩個數(shù)組實參數(shù)組的起始地址傳送給形參數(shù)組,兩個數(shù)組共占同一段內(nèi)存單元。形參數(shù)組中各元素的值如共占同一段內(nèi)存單元。形參數(shù)組中各元素的值如發(fā)生變化會使實參數(shù)組元素的值同時發(fā)生變化。發(fā)生變化會使實參數(shù)組元素的值同時發(fā)生變化。在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組,且類型且類型應(yīng)一致,如不一致,結(jié)果

28、將出錯。應(yīng)一致,如不一致,結(jié)果將出錯。形參數(shù)組大小形參數(shù)組大小(多維數(shù)組第一維多維數(shù)組第一維)可不指定??刹恢付āP螀?shù)組名是地址變量。形參數(shù)組名是地址變量。例例 求學(xué)生的平均成果求學(xué)生的平均成果#include float average(int stu10, int n); void main() int score10, i; float av; coutInput 10 scores:; for( i=0; iscorei; av=average(score,10); coutAverage is:avendl; float average(int stu10, int n) int

29、i; float av,total=0; for( i=0; in; i+ ) total += stui; av = total/n; return av; 實參用數(shù)組名實參用數(shù)組名形參用數(shù)組定義形參用數(shù)組定義, int stu .2109score562312.88stu例例 數(shù)組元素與數(shù)組元素與 數(shù)組名作函數(shù)參數(shù)比較數(shù)組名作函數(shù)參數(shù)比較12a調(diào)用前調(diào)用前a0a112a調(diào)用調(diào)用a0a112xy21xy交換交換12a前往前往#include void swap2(int x,int y) int z; z=x; x=y; y=z;void main() int a2=1,2; swap2(a

30、0,a1); couta0=a0endla1=a1endl;值傳送值傳送12a調(diào)用前調(diào)用前12ax調(diào)用調(diào)用21ax交換交換21a前往前往#include void swap2(int x) int z; z=x0; x0=x1; x1=z;void main() int a2=1,2; swap2(a); couta0=a0endla1=a1endl;地址傳送地址傳送例例 數(shù)組元素與數(shù)組元素與 數(shù)組名作函數(shù)參數(shù)比較數(shù)組名作函數(shù)參數(shù)比較例例 數(shù)組排序數(shù)組排序-簡單項選擇擇排序簡單項選擇擇排序#include void sort(int array,int n) int i,j,k,t; for(

31、i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; if(k!=i) t=arrayi; arrayi=arrayk; arrayk=t; void main() int a10,i; for(i=0;iai; sort(a,10); for(i=0;i10;i+) coutai ; coutn;0123456789a4968573299927137688arraykjjjkjkjjjjj949i=0例例 數(shù)組排序數(shù)組排序-簡單項選擇擇排序簡單項選擇擇排序kjjkjkjjjjj0123456789a49685732999271376

32、88array949kk1368i=1#include void sort(int array,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; if(k!=i) t=arrayi; arrayi=arrayk; arrayk=t; void main() int a10,i; for(i=0;iai; sort(a,10); for(i=0;i10;i+) coutai ; coutn;0123456789a9132732495768768899arrayi=8例例 數(shù)組排序數(shù)組排

33、序-簡單項選擇擇排序簡單項選擇擇排序#include void sort(int array,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; if(k!=i) t=arrayi; arrayi=arrayk; arrayk=t; void main() int a10,i; for(i=0;iai; sort(a,10); for(i=0;i10;i+) coutai ; coutn;援用調(diào)用援用調(diào)用在函數(shù)的形參表中,在參數(shù)名前面加上地址運算在函數(shù)的形參表中,在參數(shù)名前面加上地址運

34、算符符“&,就表示這個參數(shù)的傳送方式是援用調(diào)用。,就表示這個參數(shù)的傳送方式是援用調(diào)用。但是,在調(diào)用函數(shù)時,與此對應(yīng)的實參依然只寫變但是,在調(diào)用函數(shù)時,與此對應(yīng)的實參依然只寫變量名,不要加量名,不要加“&。 運用援用調(diào)用的形參,雖然在函數(shù)內(nèi)部也當(dāng)作變運用援用調(diào)用的形參,雖然在函數(shù)內(nèi)部也當(dāng)作變量運用,但量運用,但C+并不為它安排本人的存儲區(qū)域,它并不為它安排本人的存儲區(qū)域,它用的就是實參的存儲區(qū)域,換句話說,援用調(diào)用的用的就是實參的存儲區(qū)域,換句話說,援用調(diào)用的形參與實參其實是同一個變量,只不過在函數(shù)內(nèi)部形參與實參其實是同一個變量,只不過在函數(shù)內(nèi)部暫時改用另一個名字罷了。既然是同一

35、個變量,在暫時改用另一個名字罷了。既然是同一個變量,在函數(shù)調(diào)用時,就不需求從實參向形參賦值,假設(shè)在函數(shù)調(diào)用時,就不需求從實參向形參賦值,假設(shè)在函數(shù)執(zhí)行過程中,改動了形參的值,那么函數(shù)前往函數(shù)執(zhí)行過程中,改動了形參的值,那么函數(shù)前往后,實參的值當(dāng)然有同樣的改動。后,實參的值當(dāng)然有同樣的改動。援用調(diào)用實踐上是把實參變量的地址信息傳送給函數(shù),援用調(diào)用實踐上是把實參變量的地址信息傳送給函數(shù),而在函數(shù)體內(nèi),那么把這個地址當(dāng)作形參的地址。而在函數(shù)體內(nèi),那么把這個地址當(dāng)作形參的地址。 假設(shè)要讓函數(shù)假設(shè)要讓函數(shù)f的兩個參數(shù)都運用援用調(diào)用,形參表的寫的兩個參數(shù)都運用援用調(diào)用,形參表的寫法是:法是: (int &

36、amp;x, int &y) 這種用這種用“&來表示援用調(diào)用的方法適用于各種類型的參來表示援用調(diào)用的方法適用于各種類型的參數(shù),但有一個例外:數(shù)組類型的形參,不允許運用數(shù),但有一個例外:數(shù)組類型的形參,不允許運用“&,也不用運用也不用運用“&,由于對數(shù)組類型的參數(shù),由于對數(shù)組類型的參數(shù),C+在參數(shù)傳在參數(shù)傳送時一定采用類似援用調(diào)用的方式。正由于不需求為數(shù)組送時一定采用類似援用調(diào)用的方式。正由于不需求為數(shù)組類型的形參專門分配存儲空間,所以一維數(shù)組變量名后面類型的形參專門分配存儲空間,所以一維數(shù)組變量名后面的方括號中可以空缺元素個數(shù)對二維數(shù)組,為了正確劃的方括號中可以

37、空缺元素個數(shù)對二維數(shù)組,為了正確劃分行列,只能空缺第一個方括號中的元素個數(shù)。分行列,只能空缺第一個方括號中的元素個數(shù)。 運用援用調(diào)用的參數(shù)或數(shù)組參數(shù),函數(shù)的執(zhí)行部分運用援用調(diào)用的參數(shù)或數(shù)組參數(shù),函數(shù)的執(zhí)行部分能經(jīng)過對形參的賦值去改動實參的值;運用指針類型的能經(jīng)過對形參的賦值去改動實參的值;運用指針類型的參數(shù),函數(shù)的執(zhí)行部分也能經(jīng)過指針找到調(diào)用者的變量,參數(shù),函數(shù)的執(zhí)行部分也能經(jīng)過指針找到調(diào)用者的變量,直接對其賦值。直接對其賦值。C+提供的庫函數(shù),普遍運用指針類型的參數(shù)來傳提供的庫函數(shù),普遍運用指針類型的參數(shù)來傳送數(shù)據(jù)。假設(shè)一個形參是某種類型的指針,那么實參通送數(shù)據(jù)。假設(shè)一個形參是某種類型的指針

38、,那么實參通常也該當(dāng)是同樣類型的指針,但數(shù)組依然是特殊情況。常也該當(dāng)是同樣類型的指針,但數(shù)組依然是特殊情況。例如,庫函數(shù)例如,庫函數(shù)strcpy有兩個形參,都是字符類型的指針有兩個形參,都是字符類型的指針變量,調(diào)用這個函數(shù)時,實參既可以是字符類型的指針,變量,調(diào)用這個函數(shù)時,實參既可以是字符類型的指針,也可以是字符數(shù)組,由于援用字符數(shù)組名就相當(dāng)于援用也可以是字符數(shù)組,由于援用字符數(shù)組名就相當(dāng)于援用字符型的指針變量。我們在前面運用字符型的指針變量。我們在前面運用strcpy時,就是直時,就是直接以字符串作為實參的。接以字符串作為實參的。 這一特殊情況并不限于字符類型,任何其他類型指針的這一特殊情

39、況并不限于字符類型,任何其他類型指針的形參,都可以用一樣元素類型的數(shù)組名作為實參。形參,都可以用一樣元素類型的數(shù)組名作為實參。711x:y:調(diào)用前:調(diào)用前:例例 交換兩個數(shù)交換兩個數(shù)#include void swap(int &a,int &b) int temp; temp=a; a=b; b=temp; couta=atb=bendl;void main() int x=7,y=11; coutx=xty=yendl; coutswapped:endl; swap(x,y); coutx=xty=yendl;調(diào)用終了:調(diào)用終了:117x:y:117a:b:援用調(diào)用援用調(diào)用

40、5.5函數(shù)的嵌套與遞歸調(diào)用函數(shù)的嵌套與遞歸調(diào)用&嵌套調(diào)用嵌套調(diào)用&C規(guī)定:函數(shù)定義不可嵌套,但可以嵌套規(guī)定:函數(shù)定義不可嵌套,但可以嵌套調(diào)用函數(shù)調(diào)用函數(shù)main( )調(diào)用函數(shù)調(diào)用函數(shù)a終了終了a函數(shù)函數(shù)b函數(shù)函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)b例例 求三個數(shù)中最大數(shù)和最小數(shù)的差值求三個數(shù)中最大數(shù)和最小數(shù)的差值#include int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z);void main() int a,b,c,d; cinabc; d=dif(a,b,c); coutM

41、ax-Min=dy?x:y; return(rz?r:z); int min(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); main( )調(diào)用函數(shù)調(diào)用函數(shù)dif輸出輸出終了終了dif函數(shù)函數(shù)max函數(shù)函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)max調(diào)用函數(shù)調(diào)用函數(shù)minmin函數(shù)函數(shù)&遞歸調(diào)用遞歸調(diào)用&定義:函數(shù)直接或間接的調(diào)用本身叫函數(shù)的遞定義:函數(shù)直接或間接的調(diào)用本身叫函數(shù)的遞歸調(diào)用歸調(diào)用f( )調(diào)f調(diào)f2調(diào)f1f1( )f2( )闡明闡明 C編譯系統(tǒng)對遞歸函數(shù)的自調(diào)用次數(shù)沒有限制編譯系統(tǒng)對遞歸函數(shù)的自調(diào)用次數(shù)沒有限制 每調(diào)用函數(shù)一次,在

42、內(nèi)存堆棧區(qū)分配空間,用于存放函數(shù)變量、每調(diào)用函數(shù)一次,在內(nèi)存堆棧區(qū)分配空間,用于存放函數(shù)變量、前往值等信息,所以遞歸次數(shù)過多,能夠引起堆棧溢出前往值等信息,所以遞歸次數(shù)過多,能夠引起堆棧溢出int f(int x) int y,z; z=f(y); . return(2*z);int f1(int x) int y,z; z=f2(y); . return(2*z);int f2(int t) int a,c; c=f1(a); . return(3+c);例例 求求n的階乘的階乘) 1()!1() 1 , 0(1!nnnnn#include int fac(int n) int f; if(

43、n0) coutn0,data error!endl; else if(n=0|n=1) f=1; else f=fac(n-1)*n; return(f);void main() int n, y; coutn; y=fac(n); coutn! =yendl;例例 求第求第n個個Fibonaci數(shù)數(shù)) 10( 1) 1()2() 1()(或nnnnfnfnf#include int fab(int n) if(n=0|n=1) return 1; else return(fab(n-1)+fab(n-2);void main() int n, y; coutn; y=fab(n); cou

44、tfab(n)=yendl;5.6變量的作用域和存儲類變量的作用域和存儲類 變量的屬性變量的屬性 數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)操作屬性數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)操作屬性 存儲屬性存儲屬性存儲器類型:存放器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)存儲器類型:存放器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)生存期:變量在某一時辰存在生存期:變量在某一時辰存在-靜態(tài)變量與動態(tài)變量靜態(tài)變量與動態(tài)變量作用域:變量在某區(qū)域內(nèi)有效作用域:變量在某區(qū)域內(nèi)有效-部分變量與全局變量部分變量與全局變量 變量的存儲類型變量的存儲類型 auto -自動型自動型 register-存放器型存放器型 static -靜態(tài)型靜態(tài)型 extern -

45、外部型外部型變量定義格式變量定義格式: 存儲類型存儲類型 數(shù)據(jù)類型數(shù)據(jù)類型 變量表變量表;如: int sum; auto int a,b,c; register int i; static float x,y;5.6.1變量的作用域變量的作用域 部分變量與全局變量部分變量與全局變量C+有以下的規(guī)定:有以下的規(guī)定:1、在函數(shù)內(nèi)部聲明的變量,包括形參表中列出的、在函數(shù)內(nèi)部聲明的變量,包括形參表中列出的形參,稱為這個函數(shù)的部分變量或內(nèi)部變量;形參,稱為這個函數(shù)的部分變量或內(nèi)部變量;在函數(shù)之外聲明的變量,稱為全局變量或外部變在函數(shù)之外聲明的變量,稱為全局變量或外部變量。量。 2、函數(shù)的部分變量,只在

46、函數(shù)內(nèi)部有效,或者說,、函數(shù)的部分變量,只在函數(shù)內(nèi)部有效,或者說,部分變量的作用域是其所在的函數(shù)部分變量的作用域是其所在的函數(shù) 。3、全局變量,對聲明位置以后的一切函數(shù)有效,、全局變量,對聲明位置以后的一切函數(shù)有效,或者說,全局變量的作用域,是從聲明位置開場直或者說,全局變量的作用域,是從聲明位置開場直到整個程序終了到整個程序終了 。4、假設(shè)部分變量的作用域與同名全局變量的作用、假設(shè)部分變量的作用域與同名全局變量的作用域重疊,那么在重疊的范圍內(nèi),那個全局變量無效。域重疊,那么在重疊的范圍內(nèi),那個全局變量無效。部分變量又分為動態(tài)和靜態(tài)兩種,本書中出現(xiàn)過的部分部分變量又分為動態(tài)和靜態(tài)兩種,本書中出

47、現(xiàn)過的部分變量都是動態(tài)部分變量,假設(shè)在聲明部分變量時加上變量都是動態(tài)部分變量,假設(shè)在聲明部分變量時加上“static。例如。例如static int i聲明了一個靜態(tài)部分整型變量聲明了一個靜態(tài)部分整型變量i 變量都要用存儲空間來保管本人的值。全局變量和靜態(tài)變量都要用存儲空間來保管本人的值。全局變量和靜態(tài)部分變量一旦占用空間,要到程序運轉(zhuǎn)終了才會釋放;動態(tài)部分變量一旦占用空間,要到程序運轉(zhuǎn)終了才會釋放;動態(tài)部分變量只在函數(shù)被調(diào)用時占用存儲空間,函數(shù)運轉(zhuǎn)終了立部分變量只在函數(shù)被調(diào)用時占用存儲空間,函數(shù)運轉(zhuǎn)終了立刻釋放,但是,數(shù)組或其他采用援用調(diào)用的形參是例外,它刻釋放,但是,數(shù)組或其他采用援用調(diào)用

48、的形參是例外,它們根本不占用新的空間。們根本不占用新的空間。 假設(shè)為部分變量指定初值,那么,對于靜態(tài)部分變量,假設(shè)為部分變量指定初值,那么,對于靜態(tài)部分變量,這個初值只在開場時一次賦給變量;而對于動態(tài)部分變量,這個初值只在開場時一次賦給變量;而對于動態(tài)部分變量,這個初值在函數(shù)每次執(zhí)行時都要賦給。這個初值在函數(shù)每次執(zhí)行時都要賦給。 占用空間方式的差別帶來了性能的差別。函數(shù)執(zhí)行終了占用空間方式的差別帶來了性能的差別。函數(shù)執(zhí)行終了時,動態(tài)部分變量的值隨著空間的釋放而失去意義;而全局時,動態(tài)部分變量的值隨著空間的釋放而失去意義;而全局變量和靜態(tài)部分變量的值,可以不斷堅持到再次賦值或程序變量和靜態(tài)部分變

49、量的值,可以不斷堅持到再次賦值或程序運轉(zhuǎn)終了。這里要留意,不斷堅持著值,不等于不斷能運用,運轉(zhuǎn)終了。這里要留意,不斷堅持著值,不等于不斷能運用,作用域的限制依然起作用。作用域的限制依然起作用。 在復(fù)合語句中定義的變量也是部分變量,其作用域僅僅在復(fù)合語句中定義的變量也是部分變量,其作用域僅僅是所在的復(fù)合語句。是所在的復(fù)合語句。 在程序中盡量不要運用全局變量:在程序中盡量不要運用全局變量:1、運用全局變量的函數(shù)的通用性降低了,把這樣的函數(shù)移、運用全局變量的函數(shù)的通用性降低了,把這樣的函數(shù)移植到其他程序時,需求將有關(guān)的外部變量及其值一同移過去,植到其他程序時,需求將有關(guān)的外部變量及其值一同移過去,既

50、不方便,又容易呵斥外部變量之間的同名沖突。既不方便,又容易呵斥外部變量之間的同名沖突。 2、運用全局變量過多,會給閱讀和修正程序帶來困難,由、運用全局變量過多,會給閱讀和修正程序帶來困難,由于一個變量的值會牽涉到多個函數(shù)。于一個變量的值會牽涉到多個函數(shù)。 3、全局變量在程序的整個執(zhí)行過程中都占用著存儲空間,、全局變量在程序的整個執(zhí)行過程中都占用著存儲空間,降低了內(nèi)存的運用效率。降低了內(nèi)存的運用效率。 /* 功能察看全局變量與部分變量的差別之一功能察看全局變量與部分變量的差別之一 */ #include int a=3,b=5; /a、b為全局變量為全局變量 int max(int a,int

51、b); void main() int a=8; /a為部分變量為部分變量 cout max(a,b) b ? a : b; /有了部分變量有了部分變量a、b全局變量全局變量a、b不起作用不起作用 return c; / /* * 功能察看全局變量與部分變量的差別之二功能察看全局變量與部分變量的差別之二 * */ / #include iostream.h #include iostream.h int sum(int k); int sum(int k); void main(void) void main(void) int s,i; int s,i; for (i=1;i=5;i+) f

52、or (i=1;i=5;i+) s=sum(i); s=sum(i); cout s endl; cout s endl; int sum(int k) int sum(int k) static int x=0; static int x=0; return (x-=k); return (x-=k); 調(diào)用次序調(diào)用次序 k k的值的值 進(jìn)入時進(jìn)入時x x的值的值 前往時前往時x x的值的值 1 1 0 -1 2 2 -1 -3 3 3 -3 -6 4 4 -6 -10 5 5 -10 -15 / /* *功能察看全局變量與部分變量的差別之三功能察看全局變量與部分變量的差別之三 * */ /

53、 #include #include int f(int); int f(int); void main() void main() int a=2,i; int a=2,i; for (i = 1; i = 3; i +) for (i = 1; i = 3; i +) cout f(a) n; cout f(a) n; int f(int a) int f(int a) int b = 0; int b = 0; static int c = 3; static int c = 3; b = b+1; b = b+1; c = c+1; c = c+1; return (a+b+c); r

54、eturn (a+b+c); 調(diào)用次序 進(jìn)入時b的值 前往時b的值 進(jìn)入時c的值 前往時c的值 1 0 1 3 4 2 0 1 4 5 3 0 1 5 6 5.6.2變量的存儲類變量的存儲類 動態(tài)變量與靜態(tài)變量動態(tài)變量與靜態(tài)變量 存儲方式存儲方式靜態(tài)存儲:程序運轉(zhuǎn)期間分配固定存儲空間靜態(tài)存儲:程序運轉(zhuǎn)期間分配固定存儲空間動態(tài)存儲:程序運轉(zhuǎn)期間根據(jù)需求動態(tài)分配存儲空間動態(tài)存儲:程序運轉(zhuǎn)期間根據(jù)需求動態(tài)分配存儲空間程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)全局變量、部分靜態(tài)變量形參變量部分動態(tài)變量auto register)函數(shù)調(diào)用現(xiàn)場維護(hù)和前往地址等v 生存期生存期v靜態(tài)變量靜態(tài)變量:從程序開場執(zhí)行到程序終了從

55、程序開場執(zhí)行到程序終了v動態(tài)變量動態(tài)變量:從包含該變量定義的函數(shù)開場執(zhí)行至函數(shù)執(zhí)行終了從包含該變量定義的函數(shù)開場執(zhí)行至函數(shù)執(zhí)行終了變量存儲類型變量存儲類型靜態(tài)動態(tài)存儲方式程序整個運轉(zhuǎn)期間函數(shù)調(diào)用開場至終了生存期編譯時賦初值,只賦一次每次函數(shù)調(diào)用時賦初值自動賦初值0或空字符不確定未賦初值靜態(tài)存儲區(qū)動態(tài)區(qū)存儲區(qū)存放器部分變量外部變量作用域定義變量的函數(shù)或復(fù)合語句內(nèi)本文件其它文件u部分變量默以為部分變量默以為auto型型uregister型變量個數(shù)受限型變量個數(shù)受限,且不能為且不能為long, double, float型型u部分部分static變量具有全局壽命和部分可見性變量具有全局壽命和部分可見

56、性u部分部分static變量具有可承繼性變量具有可承繼性uextern不是變量定義不是變量定義,可擴(kuò)展外部變量作用域可擴(kuò)展外部變量作用域register部分staticauto外部static外部存儲類別例例 文件文件file1.cint a;main( ) . . f2; . f1; .f1( ) auto int b; f2; .f2( ) static int c; C作用域作用域b作用域作用域a作用域作用域mainf2f1mainf1f2maina生存期生存期:b生存期生存期:c c生存期生存期: :例例 auto 變量的作用域變量的作用域#include void main() in

57、t x=1; void prt(void); int x=3; prt(); cout2nd x=xendl; cout1st x=xendl;void prt(void) int x=5; cout3th x=xendl;運轉(zhuǎn)結(jié)果:運轉(zhuǎn)結(jié)果:3th x=52nd x=31st x=1x=1作用域作用域x=1作用域作用域x=3作用域作用域x=5作用域作用域#include iostream.hvoid main() void increment(void); increment(); increment(); increment();void increment(void) int x=0;

58、x+; coutxendl;例例 部分靜態(tài)變量值具有可承繼性部分靜態(tài)變量值具有可承繼性運轉(zhuǎn)結(jié)果:運轉(zhuǎn)結(jié)果:1 1 1#include iostream.hvoid main() void increment(void); increment(); increment(); increment();void increment(void) static int x=0; x+; coutxv外部變量闡明:外部變量闡明: extern 數(shù)據(jù)類型數(shù)據(jù)類型 變量表;變量表;v外部變量定義與外部變量闡明不同外部變量定義與外部變量闡明不同v假設(shè)外部變量與部分變量同名,那么外部變量被屏蔽假設(shè)外部變量與部分變

59、量同名,那么外部變量被屏蔽v外部變量可用存儲類型:缺省外部變量可用存儲類型:缺省 或或 staticint p=1,q=5;float f1(int a) int b,c; .int f3().char c1,c2;char f2(int x,int y) int i,j; main() int m,n; .c1,c2的作用范圍的作用范圍p,q的作用范圍的作用范圍extern char c1,c2;extern char c1,c2;c1,c2的作用范圍的作用范圍擴(kuò)展后擴(kuò)展后c1,c2的作用范圍的作用范圍擴(kuò)展后擴(kuò)展后 外部變量外部變量在援用外部變量的文件中的一切函數(shù)外部,在援用外部變量的文件中

60、的一切函數(shù)外部,應(yīng)運用應(yīng)運用extern對外部變量進(jìn)展闡明,目的是對外部變量進(jìn)展闡明,目的是闡明運用的變量是在其他的文件中定義過的闡明運用的變量是在其他的文件中定義過的全局變量,本文件不再為其分配內(nèi)在。這種全局變量,本文件不再為其分配內(nèi)在。這種闡明普通應(yīng)在文件的開頭且位于一切函數(shù)的闡明普通應(yīng)在文件的開頭且位于一切函數(shù)的外面,也可在函數(shù)內(nèi)部。外面,也可在函數(shù)內(nèi)部。extern只能闡明變量而不能定義變量。只能闡明變量而不能定義變量。不能用不能用extern來初始化變量。如:來初始化變量。如:extern int x=100;是錯誤的。是錯誤的。#include iostream.hvoid main() void gx(),gy(); extern int x,y; cout1: x=xty=yendl; y=246; gx(); gy(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論