第06章-函數(shù)與變量作用域_第1頁(yè)
第06章-函數(shù)與變量作用域_第2頁(yè)
第06章-函數(shù)與變量作用域_第3頁(yè)
第06章-函數(shù)與變量作用域_第4頁(yè)
第06章-函數(shù)與變量作用域_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章函數(shù)與變量作用域C語(yǔ)言是通過(guò)函數(shù)來(lái)實(shí)現(xiàn)模塊化程序設(shè)計(jì)的。教學(xué)目的:掌握函數(shù)的定義與調(diào)用,變量的作用域;了解函數(shù)的嵌套與遞歸調(diào)用,內(nèi)部、外部函數(shù)特點(diǎn),以及變量的存儲(chǔ)特性。11/14/20231教學(xué)內(nèi)容:7.1*函數(shù)的定義與調(diào)用7.2函數(shù)的嵌套調(diào)用與遞歸調(diào)用7.3內(nèi)部函數(shù)與外部函數(shù)7.4*內(nèi)部變量與外部變量7.5變量的存儲(chǔ)特性本章要點(diǎn)本章作業(yè)與上機(jī)實(shí)踐11/14/202327.1*

函數(shù)定義與函數(shù)調(diào)用7.1.1函數(shù)定義任何函數(shù)都是由函數(shù)說(shuō)明和函數(shù)體兩部分組成。1.分類根據(jù)函數(shù)有無(wú)參數(shù),將函數(shù)分為無(wú)參函數(shù)和有參函數(shù)。11/14/20233(1)無(wú)參函數(shù)[函數(shù)類型]函數(shù)名(void){說(shuō)明語(yǔ)句部分;可執(zhí)行語(yǔ)句部分;

}(2)有參函數(shù)[函數(shù)類型]函數(shù)名(數(shù)據(jù)類型參數(shù)[,數(shù)據(jù)類型參數(shù)2…]){說(shuō)明語(yǔ)句部分;可執(zhí)行語(yǔ)句部分;

}形參表。調(diào)用有參函數(shù)時(shí),由調(diào)用函數(shù)為形參提供實(shí)際值,簡(jiǎn)稱為實(shí)參。在新標(biāo)準(zhǔn)中,函數(shù)不可缺省參數(shù)表;用“void”表示不需要參數(shù)。11/14/202342.函數(shù)的返回值與函數(shù)類型C語(yǔ)言的函數(shù),還可分為有返回值函數(shù)和無(wú)返回值函數(shù)兩種。(1)有返回值函數(shù)與return語(yǔ)句①一般格式:

return(返回值表達(dá)式);②功能:返回調(diào)用函數(shù),并將“返回值表達(dá)式”的值帶給調(diào)用函數(shù)。注意:函數(shù)中無(wú)return語(yǔ)句,返回1個(gè)不確定的值。可用“void”定義成“無(wú)(空)類型”,明確表示不返回值。括號(hào)可以缺省11/14/20235(2)函數(shù)類型①函數(shù)類型應(yīng)與return語(yǔ)句中“返回值表達(dá)式”的類型一致。如果不一致,則以函數(shù)類型為準(zhǔn)。②如果缺省函數(shù)類型,則系統(tǒng)一律按int型處理。良好的程序設(shè)計(jì)習(xí)慣:為了使程序具有良好的可讀性并減少出錯(cuò),將無(wú)返回值函數(shù)定義為空類型void;同時(shí),也不使用系統(tǒng)對(duì)函數(shù)類型的缺省處理。11/14/20236[案例7.1]定義一個(gè)求兩個(gè)整數(shù)中極大值的max()函數(shù)。

/*功能:求2個(gè)整數(shù)中的較大數(shù)*//*形參:2個(gè),整型*//*返回值:2個(gè)整數(shù)中的較大數(shù)*/intmax(intn1,intn2) /*函數(shù)定義*/{return(n1>n2?n1:n2);

}/**/voidmain(void){int

max(intn1,intn2); /*對(duì)被調(diào)用函數(shù)進(jìn)行說(shuō)明*/

intnum1,num2;

printf("inputtwonumbers:");

scanf("%d%d",&num1,&num2);

printf("max=%d\n",max(num1,num2));

}對(duì)函數(shù)的注釋11/14/202373、說(shuō)明(1)函數(shù)定義不允許嵌套。一個(gè)函數(shù)的定義,可以放在程序中的任意位置,但不能在另一個(gè)函數(shù)的函數(shù)體內(nèi),即不能嵌套定義。例如:main(){……

intmax(……){……}}(2)空函數(shù)──函數(shù)體為空的無(wú)參函數(shù):[函數(shù)類型]函數(shù)名(void){}11/14/202387.1.2函數(shù)調(diào)用與返回1、對(duì)被調(diào)用函數(shù)的說(shuō)明和函數(shù)原型(1)函數(shù)說(shuō)明的一般格式

在新標(biāo)準(zhǔn)中,采用函數(shù)原型方式,對(duì)被調(diào)用函數(shù)進(jìn)行說(shuō)明:

函數(shù)類型函數(shù)名(形參表);11/14/20239(2)函數(shù)說(shuō)明的兩種方式①誰(shuí)調(diào)用誰(shuí)說(shuō)明:函數(shù)說(shuō)明語(yǔ)句放在調(diào)用函數(shù)的函數(shù)體中。例如,在[案例7.1]主函數(shù)main()中:voidmain(void){intmax(intn1,intn2);

……}對(duì)被調(diào)用函數(shù)進(jìn)行說(shuō)明11/14/202310②預(yù)先統(tǒng)一說(shuō)明——函數(shù)說(shuō)明通常放在所有函數(shù)定義體之前。在這種方式下,所有調(diào)用函數(shù)都無(wú)需再對(duì)自定義函數(shù)進(jìn)行說(shuō)明。例如,在[案例7.1]中,可以將對(duì)max()函數(shù)的說(shuō)明放在程序文件開(kāi)始處:voidmain(void){

int

max(intn1,intn2);……}11/14/202311顯然,對(duì)于被多個(gè)函數(shù)調(diào)用的自定義函數(shù)而言,采用預(yù)先統(tǒng)一說(shuō)明方式進(jìn)行說(shuō)明,可以有效地減少函數(shù)說(shuō)明次數(shù)。

注意:如果被調(diào)用函數(shù)的定義體,出現(xiàn)在調(diào)用函數(shù)之前,可以缺省說(shuō)明。11/14/2023122、函數(shù)調(diào)用

函數(shù)名([實(shí)參表])

例如,在[案例7.1]的主函數(shù)中:

printf(……,max(num1,num2)

);注意:調(diào)用有參函數(shù),必須提供實(shí)參(常量/變量/表達(dá)式/函數(shù))。調(diào)用時(shí),實(shí)參必須具有確定的值,且與形參個(gè)數(shù)相等、類型匹配。11/14/202313(1)調(diào)用方式①語(yǔ)句方式——無(wú)返回值函數(shù)的調(diào)用,可作為一條獨(dú)立的語(yǔ)句。例如,printf()、scanf()等庫(kù)函數(shù)的調(diào)用,均作為一條獨(dú)立的語(yǔ)句。②表達(dá)式方式——有返回值函數(shù)作為表達(dá)式的一項(xiàng),以函數(shù)返回值參與表達(dá)式的運(yùn)算。例如,“max=max(x,y)”是一個(gè)賦值表達(dá)式,把max()函數(shù)的返回值賦予變量max。11/14/202314(2)斷點(diǎn)與函數(shù)調(diào)用的返回?cái)帱c(diǎn)——被調(diào)用函數(shù)執(zhí)行完畢,返回調(diào)用函數(shù)后繼續(xù)執(zhí)行的位置。調(diào)用函數(shù)中的斷點(diǎn)位置分兩種情況:①語(yǔ)句調(diào)用方式:斷點(diǎn)為函數(shù)調(diào)用語(yǔ)句的下一條語(yǔ)句。例如,[案例7.1]中的語(yǔ)句調(diào)用“printf(……);”,其斷點(diǎn)為該語(yǔ)句的下一條語(yǔ)句“getch();”。11/14/202315②表達(dá)式調(diào)用方式:斷點(diǎn)為函數(shù)調(diào)用所在的表達(dá)式。例如,在[案例7.1]中,“printf(……,max(num1,num2));”語(yǔ)句中的表達(dá)式調(diào)用“max(num1,num2)”:其斷點(diǎn)為該表達(dá)式調(diào)用所在的表達(dá)式“max(num1,num2)”(在本例中,“max(num1,num2)”函數(shù)調(diào)用既是表達(dá)式調(diào)用,本身又構(gòu)成一個(gè)簡(jiǎn)單表達(dá)式)。11/14/2023167.1.3參數(shù)傳遞發(fā)生函數(shù)調(diào)用時(shí),根據(jù)參數(shù)值的性質(zhì)不同,將參數(shù)傳遞分為兩種:(1)

值傳遞——參數(shù)值是一個(gè)一般數(shù)據(jù)(整形、實(shí)型、字符型數(shù)據(jù)等)。系統(tǒng)把實(shí)參值復(fù)制1份給形參;被調(diào)用函數(shù)結(jié)束時(shí),形參值不能傳回給實(shí)參。(2)

地址(引用)傳遞——參數(shù)值是一個(gè)地址。11/14/202317執(zhí)行[案例7.1]時(shí)的參數(shù)傳遞:intmax(int

n1,int

n2){return(n1>n2?n1:n2);

}

main(){int

max(intn1,intn2);

intnum1,num2;

printf("inputtwonumbers:");

scanf("%d%d",&num1,&num2);

printf("max=%d\n",max(num1,num2));

}11/14/202318(1)形參變量只有在被調(diào)用時(shí),才分配內(nèi)存單元;調(diào)用結(jié)束時(shí),立即被釋放。因此,形參只有在該函數(shù)內(nèi)有效。調(diào)用結(jié)束,返回調(diào)用函數(shù)后,則不能再使用該形參變量。(2)實(shí)參和形參占用不同的內(nèi)存單元,即使同名也互不影響。11/14/2023197.1.4小結(jié)1.函數(shù)定義不允許嵌套。2.調(diào)用有參函數(shù)時(shí),實(shí)參的個(gè)數(shù)和類型,必須與形參匹配。3.函數(shù)調(diào)用的兩種方式與斷點(diǎn)位置(1)語(yǔ)句方式:斷點(diǎn)為函數(shù)調(diào)用語(yǔ)句的下一條語(yǔ)句。(2)表達(dá)式方式:斷點(diǎn)為函數(shù)調(diào)用所在的表達(dá)式。11/14/2023204.參數(shù)傳遞分兩種:(1)

值傳遞:?jiǎn)蜗騻鬟f。(2)

地址(引用)傳遞。[返回]11/14/2023217.2函數(shù)的嵌套調(diào)用和遞歸調(diào)用7.2.1函數(shù)的嵌套調(diào)用

[案例7.3]計(jì)算∑=1!+2!+……+n!(n∈[1,20]的整數(shù),從鍵盤輸入)。算法設(shè)計(jì)要點(diǎn):本案例可以設(shè)計(jì)2個(gè)函數(shù):factor()用于求n?。籹um()通過(guò)調(diào)用factor()來(lái)實(shí)現(xiàn)求∑。程序框架如下(完整程序詳見(jiàn)教材7.2.1):

11/14/202322……voidmain(){……

sum(num); /*調(diào)用函數(shù)sum()*/……}voidsum(intnum){……sum+=factor(loop); /*求累計(jì)和*/……}longfactor(intnum) /*求num的階乘*/{……}11/14/202323在[案例7.3]中,主函數(shù)main()調(diào)用求和函數(shù)sum(),sum()又循環(huán)調(diào)用求階乘的函數(shù)factor()。一般地說(shuō),函數(shù)的嵌套調(diào)用是指,在執(zhí)行被調(diào)用函數(shù)時(shí),該函數(shù)又調(diào)用其它函數(shù)的情形。注意:被調(diào)用函數(shù)執(zhí)行完畢后,將返回到調(diào)用函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行。簡(jiǎn)言之,誰(shuí)調(diào)用,返回到誰(shuí)的斷點(diǎn)繼續(xù)執(zhí)行。11/14/2023247.2.2函數(shù)的遞歸調(diào)用[案例7.4]用遞歸法計(jì)算n!(1!=1,n!=(n-1)!*n(n≥2))。算法設(shè)計(jì)要點(diǎn):(1)根據(jù)計(jì)算n!的遞歸定義可知,為了計(jì)算n!,必須首先計(jì)算(n-1)??;以此類推,直至1!(1!=1)。(2)依據(jù)1!求2!=1!*2,再依據(jù)2!求3!=2!*3;同理,依據(jù)(n-1)!求n!=(n-1)!*n。11/14/202325longfactor(intnum){longfact;if(num>1)fact=factor(num–1)*num;elsefact=1;return(fact);}以num=5為例,其執(zhí)行過(guò)程詳見(jiàn)教材7.2.2。遞歸調(diào)用自己11/14/202326C語(yǔ)言允許函數(shù)直接(或間接)地調(diào)用它自己,稱為遞歸調(diào)用;這種函數(shù)稱為遞歸函數(shù)。例如,[案例7.4]中的函數(shù)factor()就是一個(gè)遞歸函數(shù)。防止遞歸調(diào)用無(wú)終止地進(jìn)行的常用辦法:添加1個(gè)繼續(xù)(或終止)遞歸調(diào)用的條件判斷。例如,[案例7.4]中函數(shù)factor()中的“if(num>1)”。[返回]11/14/2023277.3內(nèi)部函數(shù)和外部函數(shù)

C語(yǔ)言程序中的函數(shù),是通過(guò)被調(diào)用而執(zhí)行的,所以一個(gè)函數(shù)需要被其它函數(shù)調(diào)用。但是,當(dāng)一個(gè)程序由多個(gè)源文件組成時(shí),在一個(gè)源文件中定義的函數(shù),能否被其它源文件中的函數(shù)調(diào)用呢?C語(yǔ)言據(jù)此將函數(shù)分為內(nèi)部函數(shù)和外部函數(shù)。11/14/2023287.3.1內(nèi)部函數(shù)(又稱靜態(tài)函數(shù))

如果在一個(gè)源文件中定義的函數(shù),只能被本源文件中的其它函數(shù)調(diào)用,這種函數(shù)稱為內(nèi)部函數(shù)。1.定義static

函數(shù)類型函數(shù)名([形參表]){……}2.特點(diǎn):只能被本文件中的函數(shù)所調(diào)用。3.好處:不用擔(dān)心與其它源文件中的函數(shù)同名,因?yàn)榧词雇矝](méi)關(guān)系。11/14/2023297.3.2外部函數(shù)如果在某源文件中定義的函數(shù),可被同一程序中所有源文件中的函數(shù)調(diào)用,這種函數(shù)稱為外部函數(shù)。1.定義:[extern]

函數(shù)類型函數(shù)名([形參表]){……}2.特點(diǎn):允許被所有源文件中的函數(shù)所調(diào)用。3.調(diào)用其它源文件中的外部函數(shù)時(shí),需要對(duì)其進(jìn)行說(shuō)明:[extern]

函數(shù)類型函數(shù)名([形參表])[,函數(shù)名2([形參表2])…];11/14/202330[案例7.5]

將加、減、乘、除和求余數(shù)運(yùn)算練習(xí)程序(第3版))的源文件組織形式改為:實(shí)現(xiàn)加、減、乘、除和求余數(shù)運(yùn)算的程序段,均作為1個(gè)獨(dú)立的函數(shù)、存儲(chǔ)在1個(gè)獨(dú)立的源文件中。程序框架如下(完整程序詳見(jiàn)案例源代碼):11/14/202331……/*外部函數(shù)說(shuō)明*/externvoidaddition(intn1,intn2);externvoidsubtraction(intn1,intn2);

externvoidmultiplication(intn1,intn2);externvoiddivision(intn1,intn2);externvoidremainder(intn1,intn2);voidmain(){……}11/14/2023327.3.3多個(gè)源文件的編譯和連接在軟件工程項(xiàng)目中,采用結(jié)構(gòu)化方法進(jìn)行程序設(shè)計(jì)與編程,通常會(huì)產(chǎn)生多個(gè)源文件(例如源程序文件、數(shù)據(jù)結(jié)構(gòu)定義文件等)。那么,如何將這些源文件編譯、連接成一個(gè)統(tǒng)一的可執(zhí)行文件呢?一般有兩種方法:11/14/202333(1)分別編譯、一并連接C編譯程序是以源文件為編譯單位。當(dāng)一個(gè)程序中的函數(shù)和數(shù)據(jù)結(jié)構(gòu)分放在多個(gè)源文件中時(shí):先將各文件分別編譯,再通過(guò)link命令產(chǎn)生一個(gè)可執(zhí)行文件(.exe)。

(2)集中編譯、連接利用編譯預(yù)處理命令#include,將其它源文件包含到主函數(shù)main()所在的源文件的開(kāi)頭;然后直接編譯該文件即可。11/14/202334例如,在[案例7.5]中的主函數(shù)main()所在的源文件case75_1.c的開(kāi)頭添加如下幾行:……/*將其它各源文件包含進(jìn)來(lái)*/#include"case75_2.c"#include"case75_3.c"#include"case75_4.c"#include"case75_5.c"#include"case75_6.c"voidmain(){……}[返回]11/14/2023357.4*

內(nèi)部變量與外部變量

C語(yǔ)言中的變量,定義位置不同,其作用域也不同,據(jù)此將變量分為內(nèi)部變量和外部變量。7.4.1內(nèi)部變量1、內(nèi)部變量——在函數(shù)內(nèi)(函數(shù)說(shuō)明+函數(shù)體)定義的變量。2、作用域——只在該函數(shù)范圍內(nèi)有效。所以內(nèi)部變量也稱“局部變量”。11/14/202336例如,在[案例7.4]中,主函數(shù)main()中定義的變量num就是內(nèi)部變量,它僅在主函數(shù)main()中才能使用;求階乘的factor()函數(shù),函數(shù)說(shuō)明中的形參變量num,以及函數(shù)體中定義的變量fact,均屬內(nèi)部變量,都只能在factor()函數(shù)中使用。

說(shuō)明:在不同的函數(shù)中,允許使用同名內(nèi)部變量。它們代表不同的對(duì)象,互不干擾。例如,在[案例7.4]中,主函數(shù)main()中的內(nèi)部變量num,與函數(shù)factor()中的內(nèi)部變量num同名。11/14/202337[案例]內(nèi)部變量的應(yīng)用。voidmain(){voidsum(intnum);

int

num=100;

printf(“num_main()=%d\n”,num); /*調(diào)用前實(shí)參的值*/sum(num

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

printf("num_main()=%d\n",num); /*調(diào)用后實(shí)參的值*/

getch();}voidsum(intnum){inti;

printf("num_sum()=%d\n",num);/*改變前的形參值*/

for(i=num-1;i>=1;i--)num+=i;/*改變形參的值*/

printf("num_sum()=%d\n",num);/*改變后的形參值*/}11/14/2023387.4.2外部變量1、外部變量——在函數(shù)外部定義的變量。2、作用域:從外部變量的定義位置開(kāi)始,到本文件結(jié)束為止。外部變量不從屬于任何一個(gè)函數(shù),可被作用域內(nèi)的所有函數(shù)使用,所以外部變量又稱全局變量。11/14/202339[案例7.6]

設(shè)計(jì)一個(gè)函數(shù)cuboid(intlength,intwidth,intheight)(3個(gè)參數(shù)依次為長(zhǎng)方體的長(zhǎng)、寬、高),用于求長(zhǎng)方體的體積及正、側(cè)、頂三個(gè)面的面積。算法設(shè)計(jì)要點(diǎn):函數(shù)cuboid(intlength,intwidth,intheight)本身只能返回1個(gè)值(本案例選定體積),正、側(cè)、頂三個(gè)面的面積就只能通過(guò)外部變量來(lái)進(jìn)行數(shù)據(jù)共享。

參考程序框架如下:11/14/202340……longarea1,area2,area3; /*定義3個(gè)外部變量,用于數(shù)據(jù)共享*/longcuboid(intlength,intwidth,intheight); /*函數(shù)說(shuō)明*/voidmain(){……volume=cuboid(length,width,height);

printf("\nvolume=%ld,area1=%ld,area2=%ld,area3=%ld",volume,area1,area2,area3);}11/14/202341longcuboid(intlength,intwidth,intheight){longvolume;volume=length*width*height; /*計(jì)算體積*/

area1=length*width; /*計(jì)算3個(gè)面的面積*/

area2=width*height;

area3=length*height; return(volume); /*返回體積值*/}11/14/2023423、說(shuō)明(1)外部變量的作用域:從定義點(diǎn)到本文件結(jié)束。為方便使用,建議:將外部變量的定義放在文件開(kāi)頭,如[案例7.6]所示。(2)在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部變量的作用域內(nèi),外部變量不起作用。11/14/202343(3)外部變量可實(shí)現(xiàn)函數(shù)之間的數(shù)據(jù)共享,但又使這些函數(shù)依賴這些外部變量,因而使得這些函數(shù)的獨(dú)立性降低。注:從模塊化程序設(shè)計(jì)觀點(diǎn)來(lái)看,這是不利的。因此不是非用不可時(shí),不要使用外部變量。11/14/202344[案例]內(nèi)部、外部變量的同名應(yīng)用。int

len=3,width=4,high=5;int

vs(int

len,int

width){int

vol;

vol=len*width*high;/*引用外部變量high*/returnv;

}main(){int

len=5;

printf("len=%d,width=%d,high=%d,vol=%d",

len,width,high,vs(len,width));

}len=?width=?len=?11/14/2023457.4.3小結(jié)1.內(nèi)部變量——在函數(shù)內(nèi)(函數(shù)說(shuō)明+函數(shù)體)定義的變量,其作用域:只在該函數(shù)范圍內(nèi)有效。不同函數(shù)中的同名內(nèi)部變量,互不干擾。2.外部變量——在函數(shù)外部定義的變量,其作用域:從外部變量的定義位置開(kāi)始,到本文件結(jié)束為止。允許內(nèi)部、外部變量同名。在內(nèi)部變量的作用域內(nèi),外部變量不起作用。[返回]11/14/2023467.5變量的存儲(chǔ)特性

C語(yǔ)言中的變量,不僅有類型特性,還有存儲(chǔ)特性:(1)動(dòng)態(tài)存儲(chǔ)方式:自動(dòng)內(nèi)部變量(auto)、寄存器變量(register)(2)靜態(tài)存儲(chǔ)方式:靜態(tài)內(nèi)部變量(static)、外部變量(extern)。11/14/2023477.5.1內(nèi)部變量的存儲(chǔ)1.動(dòng)態(tài)存儲(chǔ)──自動(dòng)內(nèi)部變量(簡(jiǎn)稱自動(dòng)變量)(1)定義:[auto]數(shù)據(jù)類型內(nèi)部變量表;(2)存儲(chǔ)特點(diǎn):①作用域:局限于定義它的函數(shù)內(nèi)。②生存期:函數(shù)被調(diào)用時(shí),分配存儲(chǔ)空間;調(diào)用結(jié)束就釋放。③初始化:定義而不初始化,其值是不確定的。如果初始化,則每次調(diào)用都要重新賦一次初值。11/14/2023482.靜態(tài)存儲(chǔ)──靜態(tài)內(nèi)部變量(1)定義:static

數(shù)據(jù)類型內(nèi)部變量表;(2)存儲(chǔ)特點(diǎn)①作用域:不變(只在本函數(shù)內(nèi)有效,其它函數(shù)不可引用)。②生存期:擴(kuò)展到整個(gè)程序(即函數(shù)調(diào)用結(jié)束也不釋放)。③初始化:定義但不初始化,則系統(tǒng)自動(dòng)初始化:0(整型和實(shí)型)或‘\0’(字符型);每次調(diào)用它們所在的函數(shù)時(shí),不再重新賦初值,只是保留上次調(diào)用結(jié)束時(shí)的值!11/14/202349

[案例7.7]輸出1~4的階乘,并展示自動(dòng)變量與靜態(tài)內(nèi)部變量的存儲(chǔ)特性?!璿oidmain(){intnum=1;for(;num<=4;num++)factorial(num);

getch();}voidfactorial(intn){staticlongfact=1; /*靜態(tài)內(nèi)部變量:只初始化1次*/

int

var_auto=0; /*自動(dòng)變量:每次調(diào)用都重新初始化*/fact*=n; /*求n!*/

printf("var_auto=%d,%d!=%ld\n",var_auto,n,fact);++var_auto;}11/14/202350程序運(yùn)行結(jié)果如下:

var_auto=0,1!=1

var_auto=0,2!=2

var_auto=0,3!=6

var_auto=0,4!=2411/14/2023517.5.2外部變量的存儲(chǔ)與作用域外部變量屬于靜態(tài)存儲(chǔ)。如果程序由多個(gè)源文件構(gòu)成,根據(jù)某個(gè)源文件中定義的外部變量能否被其它源文件中的函數(shù)所引用,將外部變量分為兩個(gè)作用域級(jí)別:(1)文件級(jí)外部變量──只允許被本源文件中的函數(shù)引用

static

數(shù)據(jù)類型外部變量表;說(shuō)明:“static”直譯為“靜態(tài)”,很多書籍稱之為“靜態(tài)外部變量”。本書根據(jù)這種外部變量的作用域,稱之為“文件級(jí)外部變量”。11/14/202352(2)程序級(jí)外部變量──允許被程序中、各源文件內(nèi)的函數(shù)引用定義時(shí),缺省static的外部變量,即為程序級(jí)外部變量。同一程序中的其它源文件內(nèi)的函數(shù),引用程序級(jí)外部變量時(shí),需要進(jìn)行說(shuō)明:extern數(shù)據(jù)類型外部變量表;11/14/2023537.5.3小結(jié)關(guān)鍵字“static”對(duì)內(nèi)部、外部變量的影響不同:(1)將內(nèi)部變量改為靜態(tài)存儲(chǔ):作用域未變,只擴(kuò)展了它的生存期(函數(shù)→整個(gè)程序),且每次調(diào)用所在函數(shù)時(shí),不再重新賦初值,只是保留上次調(diào)用結(jié)束時(shí)的值!(2)將外部變量改為static,縮小了它的作用域(整個(gè)程序→所在文件)。[返回]11/14/2023541、函數(shù)的定義[函數(shù)類型]函數(shù)名([形參表]){說(shuō)明語(yǔ)句部分;可執(zhí)行語(yǔ)句部分;}(1)函數(shù)定義不允許嵌套。(2)函數(shù)中無(wú)return語(yǔ)句,系統(tǒng)返回一個(gè)不確定的值??梢杂谩皏oid”定義成“無(wú)(空)類型”,表示不返回值。本章要點(diǎn)11/14/2023552、函數(shù)調(diào)用:函數(shù)名([實(shí)參表])

對(duì)于有參函數(shù):(1)必須提供實(shí)參表:實(shí)參的個(gè)數(shù)、類型必須與形參匹

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論