C語言第9章 函數(shù)_第1頁
C語言第9章 函數(shù)_第2頁
C語言第9章 函數(shù)_第3頁
C語言第9章 函數(shù)_第4頁
C語言第9章 函數(shù)_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第九章函數(shù)本章學(xué)習(xí)內(nèi)容本章首先總括的說明了C語言的函數(shù)與程序結(jié)構(gòu)。然后介紹了函數(shù)的定義、函數(shù)的參數(shù)、函數(shù)的返回值、函數(shù)的調(diào)用、函數(shù)的嵌套調(diào)用和函數(shù)的遞歸調(diào)用。還介紹了數(shù)組作為函數(shù)的參數(shù)。介紹了局部變量與全局變量以及變量的存儲類別。通過一個具體的多源文件程序的例子說明了工程文件的創(chuàng)建和生成可執(zhí)行文件的方法。最后介紹了編譯預(yù)處理的有關(guān)知識。本章學(xué)習(xí)目的

掌握函數(shù)的定義和調(diào)用方法,使學(xué)生進(jìn)一步掌握結(jié)構(gòu)化程序設(shè)計(jì)的方法。了解形式參數(shù)、實(shí)際參數(shù)、傳值和傳地址的基本概念。能設(shè)計(jì)具有自定義函數(shù)的程序,包括函數(shù)的嵌套調(diào)用以及函數(shù)的遞歸調(diào)用的程序。掌握變量的作用域和變量的生存期,掌握編譯預(yù)處理的有關(guān)知識。

本章學(xué)習(xí)重點(diǎn)和難點(diǎn)重點(diǎn):1.函數(shù)的定義。2.主調(diào)函數(shù)與被調(diào)函數(shù)之間參數(shù)的傳遞。難點(diǎn):函數(shù)的遞歸調(diào)用。第九章函數(shù)9.1概述9.2

函數(shù)定義的一般形式9.3函數(shù)參數(shù)和函數(shù)的值9.4

函數(shù)的調(diào)用9.5

函數(shù)的嵌套調(diào)用9.6

函數(shù)的遞歸調(diào)用9.7數(shù)組作為函數(shù)的參數(shù)9.8局部變量和全局變量9.9變量的的存儲類別9.10工程文件9.11

編譯預(yù)處理9.1概述一個C程序可由一個主函數(shù)和若干個函數(shù)構(gòu)成。由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。同一個函數(shù)可以被一個或多個函數(shù)調(diào)用任意多次。

9.1概述

在程序設(shè)計(jì)中,常常將一些常用的功能模塊編寫成函數(shù),放在函數(shù)庫中供選用。從而減少程序段的重復(fù)編寫。

9.1概述例1函數(shù)printstar()的功能為打印一行*號,函數(shù)print_message()的功能為打印HappyNewYear!,按下列格式在屏幕上輸出:**********************

HappyNewYear!**********************9.1概述說明:(1)一個源程序文件由一個或多個函數(shù)組成。一個源程序文件是一個編譯單位,即以源程序?yàn)閱挝贿M(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。

(2)一個C程序由一個或多個源程序文件組成。對于較大的程序,一般不希望全部放在一個文件中,而將函數(shù)和其他內(nèi)容分別放在若干個源文件中,再由若干個源文件組成一個C程序。這樣可以分別編寫、分別編譯,提高工作效率。一個源文件可以為多個C程序公用。9.1概述(3)C程序的執(zhí)行從main函數(shù)開始,條用其他函數(shù)后流程返回到main函數(shù),在main函數(shù)中結(jié)束整個程序的運(yùn)行。main函數(shù)是系統(tǒng)定義的。

(4)所有函數(shù)都是平行的,即在定義函數(shù)時是互相獨(dú)立的,一個函數(shù)名不從屬另一函數(shù),即函數(shù)不能嵌套定義。函數(shù)間可以互相調(diào)用,但是不能調(diào)用main函數(shù)。

9.1概述(5)從用戶使用的角度看,函數(shù)可分為兩類:①標(biāo)準(zhǔn)函數(shù),即庫函數(shù)。這是由系統(tǒng)定義的,用戶可以直接使用,但在使用前要將相應(yīng)的頭文件包含到程序中去。②用戶自己定義的函數(shù)。用以解決用戶專門的需要。

9.1概述(6)從函數(shù)的形式看,函數(shù)可分為兩類:①無參函數(shù)。例1中的printstar和print_message函數(shù)就是無參函數(shù)。②有參函數(shù)。在調(diào)用函數(shù)時,在主調(diào)函數(shù)和被調(diào)函數(shù)之間有數(shù)據(jù)的傳遞。也就是說,主調(diào)函數(shù)可以將數(shù)據(jù)傳給被調(diào)函數(shù)使用,被調(diào)用函數(shù)中的數(shù)據(jù)也可以帶回來供主調(diào)函數(shù)使用。9.2

函數(shù)定義的一般形式1.無參函數(shù)的定義形式類型標(biāo)識符

函數(shù)名(){聲明部分

語句}

例1中的printstar和print_message函數(shù)就是無參函數(shù)。

9.2

函數(shù)定義的一般形式2.有參函數(shù)定義的一般形式類型標(biāo)識符

函數(shù)名(形式參數(shù)列表){聲明部分

語句}

9.2

函數(shù)定義的一般形式3.可以有“空函數(shù)”形式:類型標(biāo)識符

函數(shù)名(){}例如:dummy(){}

9.2

函數(shù)定義的一般形式例1求出2個任意整數(shù)中的最大數(shù),并輸出。/*求兩個任意整數(shù)中的最大值*//*現(xiàn)代形式參數(shù)說明方式*/main(){inta,b,c;printf("請輸入a,b:");scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis:%d\n",c);}intmax(intx,inty)/*定義有參函數(shù)max*/{intz;/*函數(shù)中的說明部分*/

z=x>y?x:y;return(z);}

9.2

函數(shù)定義的一般形式

例2編寫學(xué)生成績管理系統(tǒng)菜單程序。

9.2

函數(shù)定義的一般形式

4.對形參聲明的傳統(tǒng)方式/*求兩個任意整數(shù)中的最大值*//*傳統(tǒng)形式參數(shù)說明方式*/main(){inta,b,c;printf("請輸入a,b:");scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis:%d\n",c);}

intmax(x,y)/*指定參數(shù)x,y*/intx,y;/*對參數(shù)進(jìn)行類型說明*/{intz;z=x>y?x:y;return(z);}9.2

函數(shù)定義的一般形式

一般把這種方法稱為傳統(tǒng)的對形式參數(shù)的聲明方式,而把前面介紹的方法稱為現(xiàn)代的方式。TurboC和目前使用的多數(shù)C版本對這兩種方法都允許使用,兩種方法等價,ANSI新標(biāo)準(zhǔn)推薦前一種方法即現(xiàn)代方式。9.3函數(shù)參數(shù)和函數(shù)的值9.3.1

形式參數(shù)和實(shí)際參數(shù)9.3.2

函數(shù)的返回值

9.3.1形式參數(shù)和實(shí)際參數(shù)形式參數(shù)——在定義函數(shù)時函數(shù)名后面圓括弧中的變量名稱為形式參數(shù),簡稱為形參。實(shí)際參數(shù)——在主調(diào)函數(shù)中調(diào)用一個函數(shù)時,函數(shù)名后面圓括弧中的參數(shù)稱為實(shí)際參數(shù),簡稱為實(shí)參。9.3.1形式參數(shù)和實(shí)際參數(shù)例1

調(diào)用函數(shù)時的數(shù)據(jù)傳遞。9.3.1形式參數(shù)和實(shí)際參數(shù)

關(guān)于形參和實(shí)參的說明:

(1)在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中的存儲單元。只有在發(fā)生函數(shù)調(diào)用時,函數(shù)中的形參才由系統(tǒng)分配內(nèi)存單元。在調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。9.3.1形式參數(shù)和實(shí)際參數(shù)

(2)實(shí)參可以是常量、變量或表達(dá)式。但要求它們有確定的值,在調(diào)用時將實(shí)參的值賦給形參(如果是數(shù)組名,則傳遞的是數(shù)組首地址而不是數(shù)組的值)。例如:max(3,a+b);9.3.1形式參數(shù)和實(shí)際參數(shù)

(3)在被定義的函數(shù)中,必須指定形參的類型。9.3.1形式參數(shù)和實(shí)際參數(shù)

(4)實(shí)際參數(shù)與實(shí)際參數(shù)的類型應(yīng)性同或賦值兼容。如果實(shí)際參數(shù)為整型而形式參數(shù)為實(shí)型,或者相反,則按照前面介紹的不同類型數(shù)據(jù)的賦值規(guī)則進(jìn)行轉(zhuǎn)換。例如,實(shí)際參數(shù)值a為3.5,而形式參數(shù)x為整型,則將實(shí)數(shù)3.5轉(zhuǎn)換成整型數(shù)3,然后送到形式參數(shù)b。但此時應(yīng)將max函數(shù)放在main函數(shù)的前面或在main函數(shù)中對被調(diào)用函數(shù)max作原型聲明,否則會出錯。9.3.1形式參數(shù)和實(shí)際參數(shù)

(5)C語言規(guī)定,實(shí)參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回來給實(shí)參。9.3.1形式參數(shù)和實(shí)際參數(shù)例2交換兩個變量的值。注意:C語言中,由于參數(shù)傳遞是單向的,所以這是一個錯誤的程序。

9.3.1形式參數(shù)和實(shí)際參數(shù)

例3分析下列程序。main(){intx=2,y=3,z=0;printf("*x=%d,y=%d,z=%d\n",x,y,z);try(x,y,z);/*函數(shù)調(diào)用,x,y,z為實(shí)參*/

printf("****x=%d,y=%d,z=%d\n",x,y,z);}

try(intx,inty,intz){printf("**x=%d,y=%d,z=%d\n",x,y,z);

z=x+y;x=x*x;y=y*y;printf("***x=%d,y=%d,z=%d\n",x,y,z);}9.3.2

函數(shù)的返回值說明:(1)函數(shù)的返回值是通過函數(shù)中的return語句獲得的。return語句將被調(diào)用函數(shù)中的一個確定值帶回主調(diào)函數(shù)中去。9.3.2

函數(shù)的返回值

例4已知x,求y的值。

2x2-xx≥0y=2x2x<09.3.2

函數(shù)的返回值(2)函數(shù)值的類型。既然函數(shù)有返回值,這個值當(dāng)然應(yīng)屬于某一個確定的類型,應(yīng)當(dāng)在定義函數(shù)時指定函數(shù)值的類型。例如:

intmax(intx,inty)

C語言規(guī)定,凡不加類型說明的函數(shù),一律自動按整型處理。9.3.2

函數(shù)的返回值(3)如果函數(shù)值的類型和return語句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn)。對數(shù)值型數(shù)據(jù),可以自動進(jìn)行類型轉(zhuǎn)換。即函數(shù)類型決定返回值的類型。9.3.2

函數(shù)的返回值(4)如果被調(diào)用函數(shù)中沒有return語句,并不帶回一個切頂?shù)?、用戶所希望得到的函?shù)值,但實(shí)際上,函數(shù)并不是不帶回值,而只是不帶回有用的值,帶回的是一個不確定的值。

(5)為了明確表示“不帶回值”,可以用“void”定義無類型(或稱為空類型)。9.3.2

函數(shù)的返回值例6將前面打印程序中的printstar()和print_message()函數(shù)定義成為無類型函數(shù)。

9.4

函數(shù)的調(diào)用9.4.1

函數(shù)調(diào)用的一般形式9.4.2

函數(shù)調(diào)用的方式9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型9.4.1

函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式:

函數(shù)名(<實(shí)際參數(shù)列表>);

9.4.1

函數(shù)調(diào)用的一般形式說明:(1)如果是調(diào)用無參函數(shù),則<實(shí)際參數(shù)列表>可以省略,但是括號不能省。(2)如果實(shí)際參數(shù)列表中包括多個實(shí)際參數(shù),則個參數(shù)之間用逗號隔開。(3)實(shí)際參數(shù)與形式參數(shù)的個數(shù)應(yīng)相等,類型應(yīng)一致。實(shí)際參數(shù)與形式參數(shù)按順序?qū)?yīng),一一傳遞。

9.4.1

函數(shù)調(diào)用的一般形式(4)如果實(shí)際參數(shù)列表中包括多個參數(shù),對實(shí)際參數(shù)求值的順序接頂于編譯系統(tǒng)。有的系統(tǒng)按自左至右,有的系統(tǒng)則按自右至左的順序。例如TurboC和MSC是按自右至左的順序求值的。9.4.2

函數(shù)調(diào)用的方式1.函數(shù)語句main(){printstar();/*調(diào)用printstar函數(shù)*/

print_message();/*調(diào)用print_message函數(shù)*/

printstar();/*調(diào)用printstar函數(shù)*/}9.4.2

函數(shù)調(diào)用的方式

2.函數(shù)表達(dá)式函數(shù)出現(xiàn)在一個表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。這時要求函數(shù)帶回一個確定的函數(shù)值參加表達(dá)式的運(yùn)算。例如:

c=2*max(a,b);9.4.2

函數(shù)調(diào)用的方式3.函數(shù)參數(shù)函數(shù)調(diào)用作為一個函數(shù)的參數(shù)。例如:printf(“%d”,max(a,b));

9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型被調(diào)用函數(shù)應(yīng)具備的條件:(1)被調(diào)用函數(shù)必須似乎已經(jīng)存在的函數(shù),可以是庫函數(shù)或用戶自定義函數(shù)。(2)如果使用庫函數(shù),必須在文件開頭使用#include命令將調(diào)用有關(guān)庫函數(shù)的所有需要的信息包含到本文件中來。9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型(3)如果使用用戶自定義函數(shù),而且該函數(shù)與調(diào)用它的函數(shù)在用一個文件中,一般還應(yīng)在主調(diào)用函數(shù)中對被調(diào)用的函數(shù)作聲明。

聲明——向編譯系統(tǒng)聲明將要調(diào)用的函數(shù),并將有關(guān)信息通知編譯系統(tǒng)。

9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型

以上函數(shù)聲明稱為——函數(shù)原型。使用函數(shù)原型的作用主要是利用它在程序的編譯階段對函數(shù)的合法性做全面的檢查。9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型函數(shù)原型的一般形式:形式1:

函數(shù)類型函數(shù)名(<參數(shù)類型1>,<參數(shù)類型2>,…);形式2:函數(shù)類型函數(shù)名(<參數(shù)類型1參數(shù)名1>,<參數(shù)類型2參數(shù)名2>,…);

9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型說明:(1)如果在函數(shù)調(diào)用之前沒有對函數(shù)作聲明,則編譯系統(tǒng)把第一次遇到的函數(shù)形式(函數(shù)定義或者函數(shù)調(diào)用)作為函數(shù)聲明,并將函數(shù)類型默認(rèn)為int型。(2)如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)用函數(shù)之前,可以不必加以聲明。因?yàn)榫幾g系統(tǒng)已經(jīng)先知道了定義的函數(shù)類型,會根據(jù)函數(shù)首部提供的信息對函數(shù)的調(diào)用作正確性的檢查。9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型(3)如果已在所有函數(shù)定義之前,在函數(shù)的外部已經(jīng)做了函數(shù)聲明,則在各個函數(shù)中不必對所調(diào)用的函數(shù)再作聲明。9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型例2求兩個任意整數(shù)中的最大值。9.4.3對被調(diào)用函數(shù)的聲明和函數(shù)原型例3求兩個任意整數(shù)之和,在函數(shù)的外部聲明。9.5

函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用——一個函數(shù)調(diào)用另一個函數(shù),這個函數(shù)又調(diào)用另外一個函數(shù),這樣的調(diào)用稱為函數(shù)的嵌套調(diào)用。

9.6

函數(shù)的遞歸調(diào)用9.6.1

遞歸的概念9.6.2

遞歸程序設(shè)計(jì)應(yīng)用舉例

9.6.1遞歸的概念遞歸——通俗地講,用自身的結(jié)構(gòu)來描述自身,就稱為遞歸。遞歸調(diào)用——在調(diào)用一個函數(shù)的過程中,又出現(xiàn)直接地或間接地調(diào)用該函數(shù)本身,這種函數(shù)的調(diào)用稱為遞歸調(diào)用。

9.6.2

遞歸程序設(shè)計(jì)應(yīng)用舉例

例1用遞歸求n!。

1n=0n!=n*(n-1)!n>09.6.2

遞歸程序設(shè)計(jì)應(yīng)用舉例

例2用遞歸調(diào)用的方法計(jì)算xn。

1n=0xn=

x*xn-1n>0

9.6.2

遞歸程序設(shè)計(jì)應(yīng)用舉例

例3

用遞歸求2個正整數(shù)的最大公約數(shù)。

輾轉(zhuǎn)相除法:

nmModn=0

gcd(m,n)=

gcd(n,mModn)mModn≠0

9.7數(shù)組作為函數(shù)的參數(shù)

1.?dāng)?shù)組元素作函數(shù)參數(shù)

數(shù)組元素作函數(shù)參數(shù)——傳值與用變量作實(shí)際參數(shù)一樣,數(shù)組元素作函數(shù)的實(shí)際參數(shù)是單向傳遞,屬于值傳送。

9.7數(shù)組作為函數(shù)的參數(shù)例1求10個數(shù)中的最大值。

b——最大值9.7數(shù)組作為函數(shù)的參數(shù)

2.?dāng)?shù)組名作函數(shù)參數(shù)

數(shù)組名作函數(shù)參數(shù)——傳地址9.7數(shù)組作為函數(shù)的參數(shù)說明:(1)如果形式參數(shù)是數(shù)組形式,則實(shí)際參數(shù)必須是實(shí)際的數(shù)組名,如果實(shí)際參數(shù)是數(shù)組名,則形式參數(shù)可以是同樣維數(shù)的數(shù)組名或指針。(2)在主調(diào)用函數(shù)和被調(diào)用函數(shù)中分別定義數(shù)組。(3)實(shí)參數(shù)組和形參數(shù)組必須類型一致,形參數(shù)組可以不指明長度。9.7數(shù)組作為函數(shù)的參數(shù)(4)在C中,數(shù)組名除了作變量的標(biāo)識符外,數(shù)組明換代表了該數(shù)組在內(nèi)存中的起始地址,因此,當(dāng)數(shù)組名作函數(shù)參數(shù)時,實(shí)參與形參之間是地址傳遞,實(shí)參數(shù)組名將該數(shù)組的起始地址傳遞給形參數(shù)組,兩個數(shù)組共享相同的內(nèi)存單元。編譯系統(tǒng)不再為形參數(shù)組分配存儲單元。9.7數(shù)組作為函數(shù)的參數(shù)例2在一個一維數(shù)組中存放10個學(xué)生的C語言程序設(shè)計(jì)的成績,求平均成績。9.7數(shù)組作為函數(shù)的參數(shù)例3用選擇法對數(shù)組中的10個整數(shù)按從小到大的順序排序。9.7數(shù)組作為函數(shù)的參數(shù)3.用多維數(shù)組名作函數(shù)參數(shù)用多維數(shù)組名作函數(shù)參數(shù)——傳地址9.7數(shù)組作為函數(shù)的參數(shù)

例4求一個3×4矩陣中的最大元素。9.8局部變量和全局變量1.8.1

局部變量1.8.2

全局變量

9.8.1局部變量

局部變量——在一個函數(shù)內(nèi)部定義的變量稱為局部變量。它只在本函數(shù)范圍內(nèi)有效,只有在本函數(shù)中可以使用,在此函數(shù)以外不能使用這些變量。

9.8.1局部變量說明:(1)主函數(shù)main中定義的變量只能在主函數(shù)中有效。(2)不同函數(shù)中可以使用相同名字的變量,它們代表不同的對象,互不干擾。(3)形式參數(shù)也是局部變量。(4)在一個函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在本復(fù)合語句中有效。

9.8.2全局變量全局變量——在函數(shù)之外定義的變量稱為外部變量,外部變量是全局變量。全局變量可以為本文件中其他函數(shù)共用。它的有效范圍為從定義變量的位置開始到本源文件結(jié)束。

9.9變量的的存儲類別9.9.1

動態(tài)存儲方式與靜態(tài)存儲方式9.9.2

auto變量用static聲明的局部變量9.9.3

用static聲明的局部變量register變量9.9.4

register變量9.9.5用extern聲明的外部變量變量

9.9.1動態(tài)存儲方式與靜態(tài)存儲方式

從變量的作用域(即從空間)來分,可以把變量分為全局變量與局部變量。

從變量值存在的時間(即生存期)來分,可以把變量分為靜態(tài)存儲方式和動態(tài)存儲方式。

9.9.1動態(tài)存儲方式與靜態(tài)存儲方式靜態(tài)存儲方式——指在程序運(yùn)行期間分配固定的存儲空間的方式。動態(tài)存儲方式——是在程序運(yùn)行期間根據(jù)需要進(jìn)行動態(tài)的分配存儲空間的方式。9.9.1動態(tài)存儲方式與靜態(tài)存儲方式內(nèi)存中提供用戶使用的存儲空間,這個存儲空間分為3個部分:

1.程序區(qū)

2.靜態(tài)存儲區(qū)

3.動態(tài)存儲區(qū)9.9.1動態(tài)存儲方式與靜態(tài)存儲方式在動態(tài)存儲區(qū)中存放以下數(shù)據(jù):(1)函數(shù)的形式參數(shù)。(2)自動變量(未加static聲明的局部變量)。(3)函數(shù)調(diào)用時保護(hù)現(xiàn)場和返回地址等。9.9.1動態(tài)存儲方式與靜態(tài)存儲方式在C語言中數(shù)據(jù)的存儲類別分為兩大類:靜態(tài)存儲類和動態(tài)存儲類。具體包含4種:自動的(auto)、靜態(tài)的(static)、寄存器的(register)和外部的(extern)。根據(jù)變量的存儲類別,可以確定變量的作用域和生存期。9.9.2auto變量自動變量——函數(shù)中的局部變量不說明存儲類別的或者是用auto說明類別的變量稱為自動變量。

9.9.3用static聲明的局部變量靜態(tài)局部變量——使用static說明其類別的局部變量稱為靜態(tài)局部變量。9.9.3用static聲明的局部變量靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后,函數(shù)中的局部變量的值不消失,保留原值,即不釋放所占用的存儲單元,在下一次調(diào)用函數(shù)時,靜態(tài)局部變量已經(jīng)有值,靜態(tài)局部變量只初始化一次。9.9.3用static聲明的局部變量

靜態(tài)局部變量與自動局部變量的比較:(1)靜態(tài)局部變量屬于靜態(tài)存儲類別,在靜態(tài)區(qū)內(nèi)分配存儲單元,在程序整個運(yùn)行期間都不釋放所占用的空間。而自動變量屬于動態(tài)存儲類別,在動態(tài)區(qū)內(nèi)分配存儲單元,在函數(shù)調(diào)用結(jié)束后釋放所占用的空間。9.9.3用static聲明的局部變量(2)靜態(tài)局部變量只在編譯時賦初值一次,以后沒次調(diào)用函數(shù)時不再初始化變量,從而保留了上一次函數(shù)調(diào)用結(jié)束時的值。而自動變量不是在編譯時賦初值,而是在調(diào)用函數(shù)時初始化變量,每調(diào)用一次函數(shù)就初始化一次。9.9.3用static聲明的局部變量(3)靜態(tài)局部變量不初始化,則編譯系統(tǒng)自動對數(shù)值型變量賦初值0,對字符變量賦初空值。而自動變量不初始化,則它的值是一個不確定的訶子。這是由于每次函數(shù)調(diào)用結(jié)束后存儲單元已經(jīng)釋放,下次調(diào)用時又重新另外反陪存儲單元,而新分配的單元中的值是不確定的。9.9.3用static聲明的局部變量那么,何時使用靜態(tài)局部變量呢?(1)需要保留函數(shù)上一次調(diào)用的值。(2)如果初始化后,變量只被引用而不改變其值,這時使用靜態(tài)局部變量比較方便,以免每次調(diào)用時重新賦值。

9.9.3用static聲明的局部變量例1分析下列

溫馨提示

  • 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

提交評論