版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1目錄7.1用戶自定義函數(shù)的種類7.2函數(shù)的定義7.3被調(diào)函數(shù)的聲明7.4函數(shù)的調(diào)用7.5函數(shù)的嵌套調(diào)用7.6函數(shù)的遞歸調(diào)用7.7數(shù)組作函數(shù)參數(shù)7.8變量的作用域7.9變量的存儲(chǔ)類別27.1
用戶自定義函數(shù)的種類
1.有返回值函數(shù)和無返回值函數(shù)
C語言的函數(shù)兼有其它語言中的函數(shù)和過程兩種功能,從這個(gè)角度看,又可把函數(shù)分為有返回值函數(shù)和無返回值函數(shù)兩種。
1)有返回值函數(shù) 此類函數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返回一個(gè)執(zhí)行結(jié)果,稱為函數(shù)返回值,如數(shù)學(xué)函數(shù)即屬于此類函數(shù)。由用戶定義的這種要返回函數(shù)值的函數(shù),必須在函數(shù)定義和函數(shù)聲明中明確返回值的類型,在函數(shù)調(diào)用時(shí)要接收函數(shù)的返回值。
2)無返回值函數(shù) 此類函數(shù)用于完成某項(xiàng)特定的處理任務(wù),執(zhí)行完成后不向調(diào)用者返回函數(shù)值,這類函數(shù)類似于其它語言的過程。由于函數(shù)無須返回值,用戶在定義此類函數(shù)時(shí)可指定它的返回為空類型,空類型的聲明符為void,在函數(shù)調(diào)用時(shí)不能得到函數(shù)的返回值。37.1
用戶自定義函數(shù)的種類
2.無參函數(shù)和有參函數(shù) 從主調(diào)函數(shù)和被調(diào)函數(shù)之間數(shù)據(jù)傳送的角度看又可分為無參函數(shù)和有參函數(shù)兩種。
1)無參函數(shù) 函數(shù)定義、函數(shù)聲明及函數(shù)調(diào)用中均不帶參數(shù)。主調(diào)函數(shù)和被調(diào)函數(shù)之間不進(jìn)行參數(shù)傳送。此類函數(shù)通常用來完成一組指定的功能,可以返回或不返回函數(shù)值。
2)有參函數(shù) 也稱為帶參函數(shù)。在函數(shù)定義及函數(shù)聲明時(shí)都有參數(shù),稱為形式參數(shù)(簡(jiǎn)稱為形參)。在函數(shù)調(diào)用時(shí)也必須給出參數(shù),稱為實(shí)際參數(shù)(簡(jiǎn)稱為實(shí)參)。形參和實(shí)參的個(gè)數(shù)及對(duì)應(yīng)位置參數(shù)的類型必須一致。進(jìn)行函數(shù)調(diào)用時(shí),主調(diào)函數(shù)將把實(shí)參的值傳送給形參,供被調(diào)函數(shù)使用,這一過程叫形實(shí)結(jié)合方式,也叫參數(shù)傳遞方式。47.2
函數(shù)的定義
1.無參函數(shù)的定義
無參函數(shù)的定義形式為: 類型標(biāo)識(shí)符函數(shù)名() {
聲明部分 執(zhí)行部分
}
1)函數(shù)首部 類型標(biāo)識(shí)符和函數(shù)名為函數(shù)首部。 (1)類型標(biāo)識(shí)符指明了本函數(shù)返回值的類型。無參函數(shù)可以帶回或不帶回函數(shù)值,但一般以不帶回函數(shù)值的居多,此時(shí)函數(shù)類型聲明符可以寫為void。57.2
函數(shù)的定義
1.無參函數(shù)的定義
1)函數(shù)首部
(2)函數(shù)名是由用戶定義的標(biāo)識(shí)符,應(yīng)符合標(biāo)識(shí)符命名規(guī)則。函數(shù)名后有一個(gè)空括號(hào),其中無參數(shù),但括號(hào)不可少,作為函數(shù)的標(biāo)志。
2)函數(shù)體
{}中的內(nèi)容稱為函數(shù)體,包括聲明部分和執(zhí)行部分。聲明部分是對(duì)函數(shù)體內(nèi)部所用到的變量的類型聲明;執(zhí)行部分完成函數(shù)的功能。67.2
函數(shù)的定義 2.有參函數(shù)的定義 有參函數(shù)定義的一般形式為:
類型標(biāo)識(shí)符函數(shù)名(形式參數(shù)表列) {
聲明部分 執(zhí)行部分
}
有參函數(shù)比無參函數(shù)多了一個(gè)內(nèi)容,即形式參數(shù)表列。在形參表中給出的參數(shù)稱為形式參數(shù),它們可以是各種類型的變量,各參數(shù)之間用逗號(hào)分隔。在進(jìn)行函數(shù)調(diào)用時(shí),主調(diào)函數(shù)將賦給這些形式參數(shù)實(shí)際的值。形參既然是變量,必須在形參表中給出形參的類型聲明。77.2
函數(shù)的定義 3.帶返回值的函數(shù)定義 帶返回值的函數(shù),函數(shù)體的執(zhí)行部分必須通過return語句給函數(shù)返回指定類型的值。
return語句的一般形式為:
return表達(dá)式; 或者為:
return(表達(dá)式); 該語句的功能是計(jì)算表達(dá)式的值,并將該值返回給主調(diào)函數(shù)。在函數(shù)中允許有多個(gè)return語句,但每次調(diào)用只能有一個(gè)return語句被執(zhí)行,因此只能返回一個(gè)函數(shù)值。在定義函數(shù)時(shí)指定的函數(shù)類型一般應(yīng)該和return語句中的表達(dá)式類型一致;如果函數(shù)值的類型和return語句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn)。87.2
函數(shù)的定義 4.不帶返回值的函數(shù)定義 不帶返回值的函數(shù)應(yīng)明確定義為空類型,類型聲明符為void。一旦函數(shù)被定義為空類型,就不能在主調(diào)函數(shù)中使用被調(diào)函數(shù)的函數(shù)值了。
5.函數(shù)定義的位置 在C程序中,一個(gè)函數(shù)的定義可以放在任意位置,既可放在主函數(shù)main之前,也可放在main之后。 在C語言中,所有函數(shù)的定義,包括主函數(shù)main在內(nèi),都是平行的。也就是說,在一個(gè)函數(shù)的函數(shù)體內(nèi),不能再定義另一個(gè)函數(shù),即不能嵌套定義。97.3
被調(diào)函數(shù)的聲明
對(duì)于用戶自定義函數(shù),不僅要在程序中定義函數(shù),而且在主調(diào)函數(shù)中還要對(duì)該被調(diào)函數(shù)進(jìn)行聲明,然后才能使用。 在一個(gè)函數(shù)中調(diào)用另一個(gè)自己定義的函數(shù),如果被調(diào)函數(shù)在主調(diào)函數(shù)之后定義,那么在主調(diào)函數(shù)中調(diào)用被調(diào)函數(shù)之前應(yīng)對(duì)該被調(diào)函數(shù)進(jìn)行聲明,這與使用變量之前要先進(jìn)行變量聲明是一樣的。在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)作聲明的目的是使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類型,以便在主調(diào)函數(shù)中按此種類型對(duì)返回值作相應(yīng)的處理。107.3
被調(diào)函數(shù)的聲明 1.函數(shù)聲明的一般形式
類型聲明符被調(diào)函數(shù)名(類型形參,類型形參…);
或?yàn)椋?/p>
類型聲明符被調(diào)函數(shù)名(類型,類型…);
括號(hào)內(nèi)給出了形參的類型和形參名,或只給出形參類型。便于編譯系統(tǒng)進(jìn)行檢錯(cuò),以防止可能出現(xiàn)的錯(cuò)誤。 例如:
intmax(inta,intb);
或?qū)憺椋?/p>
intmax(int,int);117.3
被調(diào)函數(shù)的聲明
2.可以省略主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)的函數(shù)聲明
C語言中又規(guī)定在以下幾種情況時(shí)可以省去主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)的函數(shù)聲明。 (1)當(dāng)被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前時(shí),在主調(diào)函數(shù)中也可以不對(duì)被調(diào)函數(shù)再作聲明而直接調(diào)用。 (2)如在所有函數(shù)定義之前,在函數(shù)外預(yù)先聲明了各個(gè)函數(shù)的類型,則在以后的各主調(diào)函數(shù)中,可不再對(duì)被調(diào)函數(shù)作聲明。
例如:
charstr(inta); voidmain() { } charstr(inta) { }127.4
函數(shù)的調(diào)用
1.函數(shù)調(diào)用的一般形式
C語言中,函數(shù)調(diào)用的一般形式為:
函數(shù)名(實(shí)際參數(shù)表列)
對(duì)無參函數(shù)調(diào)用時(shí)則無實(shí)際參數(shù)表列。實(shí)際參數(shù)表列中的參數(shù)可以是常量、變量、函數(shù)、表達(dá)式或其它構(gòu)造類型數(shù)據(jù)。各實(shí)參無需指定類型,多個(gè)實(shí)參之間用逗號(hào)分隔。
2.函數(shù)調(diào)用的方式
1)函數(shù)表達(dá)式
函數(shù)調(diào)用出現(xiàn)在另一個(gè)表達(dá)式中,這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算。例如:z=max(x,y)是一個(gè)賦值表達(dá)式,把max的返回值賦給變量z。137.4
函數(shù)的調(diào)用 2.函數(shù)調(diào)用的方式
2)函數(shù)調(diào)用語句 函數(shù)調(diào)用單獨(dú)作為一個(gè)語句,即在一般形式末尾加上分號(hào)構(gòu)成函數(shù)調(diào)用語句。例如:printf(“%d”,a);就是以函數(shù)調(diào)用語句的方式調(diào)用函數(shù)。這時(shí)不要求函數(shù)帶返回值,只要求函數(shù)完成一定的操作。
3)函數(shù)實(shí)參 函數(shù)調(diào)用作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實(shí)參進(jìn)行傳送,因此要求該函數(shù)必須是有返回值的。 例如: printf("%d",max(x,y)); 把max函數(shù)調(diào)用的返回值又作為printf函數(shù)的實(shí)參來使用。147.4
函數(shù)的調(diào)用 2.函數(shù)調(diào)用的方式
【例7_1】函數(shù)的定義、聲明及調(diào)用舉例。
#include<stdio.h> intmax(inta,intb) {if(a>b)returna; elsereturnb;} voidmain() {intmax(inta,intb); intx,y,z; printf("inputtwonumbers:\n"); scanf("%d%d",&x,&y); z=max(x,y); printf("maxmum=%d\n",z); }157.4
函數(shù)的調(diào)用
3.函數(shù)調(diào)用的參數(shù)傳遞
1)函數(shù)的形參和實(shí)參的特點(diǎn) (1)形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。 (2)實(shí)參可以是常量、變量、函數(shù)、表達(dá)式或其它構(gòu)造類型數(shù)據(jù),無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值、輸入等辦法使實(shí)參獲得確定值。 (3)實(shí)參和形參的數(shù)量、類型、順序應(yīng)嚴(yán)格一致,否則會(huì)發(fā)生類型不匹配的錯(cuò)誤。
2)參數(shù)傳遞方式 (1)單向值傳遞 當(dāng)實(shí)參是常量、變量、函數(shù)、表達(dá)式時(shí),函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向值傳遞的,即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。167.4
函數(shù)的調(diào)用
3.函數(shù)調(diào)用的參數(shù)傳遞
2)參數(shù)傳遞方式
【例7_2】單向值傳遞
#include<stdio.h> ints(intn) {inti; for(i=n-1;i>=1;i--)n=n+i; printf("n=%d\n",n); } voidmain() {intn; printf("inputnumber\n");scanf("%d",&n);s(n);printf("n=%d\n",n); }177.4
函數(shù)的調(diào)用
3.函數(shù)調(diào)用的參數(shù)傳遞
2)參數(shù)傳遞方式 (2)雙向地址傳遞 當(dāng)實(shí)參是數(shù)組名或指針時(shí),函數(shù)調(diào)用中發(fā)生的參數(shù)傳送是雙向的。即把實(shí)參的地址傳送給形參,也就是形參和實(shí)參共用同一地址空間,形參的值發(fā)生改變,就會(huì)改變這段地址空間的值,所以實(shí)參中的值也會(huì)跟著變化。187.5
函數(shù)的嵌套調(diào)用
C語言允許在一個(gè)函數(shù)的定義中出現(xiàn)對(duì)另一個(gè)函數(shù)的調(diào)用。這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用,即在被調(diào)函數(shù)中又調(diào)用其它函數(shù)。b函數(shù)⑤①⑨結(jié)束a函數(shù)③調(diào)用b函數(shù)⑦②⑧④⑥main函數(shù)圖7_3函數(shù)嵌套調(diào)用a函數(shù)
例如:圖7_3中執(zhí)行main函數(shù)中調(diào)用a函數(shù)的語句時(shí),即轉(zhuǎn)去執(zhí)行a函數(shù),在a函數(shù)中調(diào)用b函數(shù)時(shí),又轉(zhuǎn)去執(zhí)行b函數(shù),b函數(shù)執(zhí)行完畢返回a函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行,a函數(shù)執(zhí)行完畢返回main函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行。197.5
函數(shù)的嵌套調(diào)用
【例7_3】計(jì)算s=(1+2)!+(1+2+3)!
本題可編寫兩個(gè)函數(shù),一個(gè)是用來計(jì)算平方值的函數(shù)f1,另一個(gè)是用來計(jì)算階乘值的函數(shù)f2。主函數(shù)先調(diào)f1計(jì)算出平方值,再在f1中以平方值為實(shí)參,調(diào)用f2計(jì)算其階乘值,然后返回f1,再返回主函數(shù),在循環(huán)程序中計(jì)算累加和。
#include<stdio.h> longf1(intp) {intk,r=0; intf2(int); for(k=1;k<=p;k++)r=r+k; returnf2(r); }207.5
函數(shù)的嵌套調(diào)用
intf2(intq) {inti,c=1; for(i=1;i<=q;i++)c=c*i; returnc; } voidmain() {inti,s=0; for(i=2;i<4;i++)s=s+f1(i); printf("s=%d\n",s); }217.6
函數(shù)的遞歸調(diào)用
一個(gè)函數(shù)在它的函數(shù)體內(nèi)直接或間接調(diào)用它自身,稱為遞歸調(diào)用,這種函數(shù)稱為遞歸函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層。為了防止遞歸調(diào)用無終止地進(jìn)行,必須在函數(shù)內(nèi)有終止遞歸調(diào)用的手段。常用的辦法是加條件判斷,滿足某種條件后就不再作遞歸調(diào)用,然后逐層返回。
【例7_4】用遞歸法計(jì)算n!
計(jì)算n!可用下述公式表示:
22
#include<stdio.h> longff(intn) {longf; if(n<0)printf("n<0,inputerror"); elseif(n==0||n==1)f=1; elsef=ff(n-1)*n; return(f); } voidmain() {intn;longy; printf("inputainteagernumber:"); scanf("%d",&n);y=ff(n); printf("%d!=%ld\n",n,y); }237.7
數(shù)組作函數(shù)參數(shù)
1.數(shù)組元素作函數(shù)實(shí)參
用數(shù)組元素作實(shí)參的特點(diǎn): (1)用數(shù)組元素作實(shí)參時(shí),只要數(shù)組類型和函數(shù)的形參變量的類型一致,那么作為下標(biāo)變量的數(shù)組元素的類型也和函數(shù)形參變量的類型是一致的。因此,并不要求函數(shù)的形參也是下標(biāo)變量。換句話說,對(duì)數(shù)組元素的處理是按簡(jiǎn)單變量對(duì)待的。 (2)在簡(jiǎn)單變量或下標(biāo)變量作函數(shù)參數(shù)時(shí),形參變量和實(shí)參變量是由編譯系統(tǒng)分配的兩個(gè)不同的內(nèi)存單元。在函數(shù)調(diào)用時(shí),發(fā)生值傳送是把實(shí)參變量的值賦給形參變量,不能從形參傳回實(shí)參。形參的初值和實(shí)參相同,而形參的值發(fā)生改變后,實(shí)參并不變化。247.7
數(shù)組作函數(shù)參數(shù)
1.數(shù)組元素作函數(shù)實(shí)參
【例7_5】判別一個(gè)整數(shù)數(shù)組中各元素的值,若大于0則輸出該數(shù)加1后的值,若小于等于0則輸出0值。編程如下:
voidnzp(intv) {if(v>0)printf("%d",++v); elseprintf("%d",0); } voidmain() {inta[5],i; printf("input5numbers:\n"); for(i=0;i<5;i++) {scanf("%d",&a[i]);nzp(a[i]); printf(“%d\n“,a[i]);} }257.7
數(shù)組作函數(shù)參數(shù)
2.數(shù)組名作函數(shù)實(shí)參
1)用數(shù)組名作函數(shù)參數(shù)的特點(diǎn)
(1)用數(shù)組名作函數(shù)參數(shù)時(shí),要求形參和相對(duì)應(yīng)的實(shí)參都必須是類型相同的數(shù)組,都必須有明確的數(shù)組定義。 (2)在用數(shù)組名作函數(shù)參數(shù)時(shí),不是進(jìn)行值的傳送,即不是把實(shí)參數(shù)組的每一個(gè)元素的值都賦給形參數(shù)組的各個(gè)元素。因?yàn)閷?shí)際上形參數(shù)組并不存在,編譯系統(tǒng)不為形參數(shù)組分配內(nèi)存。因此在數(shù)組名作函數(shù)參數(shù)時(shí),在函數(shù)執(zhí)行時(shí),把實(shí)參數(shù)組的首地址賦給形參數(shù)組名。形參數(shù)組名取得該首地址之后,也就等于有了實(shí)在的數(shù)組,實(shí)際上是形參數(shù)組和實(shí)參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間。因此當(dāng)形參數(shù)組發(fā)生變化時(shí),實(shí)參數(shù)組也隨之變化,相當(dāng)于實(shí)現(xiàn)了地址雙向傳遞。267.7
數(shù)組作函數(shù)參數(shù)
2.數(shù)組名作函數(shù)實(shí)參
1)用數(shù)組名作函數(shù)參數(shù)的特點(diǎn)
【例7_6】數(shù)組a中存放了一個(gè)學(xué)生5門課程的成績(jī),對(duì)這些成績(jī)上調(diào)10分。
#include<stdio.h> voidinc(inta[5]) {inti; for(i=0;i<5;i++)a[i]+=10; } voidmain() {inti,sco[5]; printf("input5scores:\n"); for(i=0;i<5;i++)scanf("%d",&sco[i]); inc(sco);printf("output5scores:\n"); for(i=0;i<5;i++)printf("%d\t",sco[i]); printf("\n"); }sco[0]Sco[1]sco[2]sco[3]sco[4]5566778887a[0]a[1]a[2]a[3]a[4]277.7
數(shù)組作函數(shù)參數(shù)
2.數(shù)組名作函數(shù)實(shí)參
2)用數(shù)組名作為函數(shù)參數(shù)時(shí)的注意事項(xiàng) (1)在函數(shù)形參表中,允許不給出形參數(shù)組的長(zhǎng)度,或用一個(gè)變量來表示數(shù)組元素的個(gè)數(shù)。例如,可以寫為:
voidp(inta[])或?qū)憺?/p>
voidp(inta[],intn)
其中形參數(shù)組a沒有給出長(zhǎng)度,而由n值動(dòng)態(tài)地表示數(shù)組的長(zhǎng)度。n的值由主調(diào)函數(shù)的實(shí)參進(jìn)行傳送。 (2)多維數(shù)組也可以作為函數(shù)的參數(shù)。在函數(shù)定義時(shí)對(duì)形參數(shù)組可以指定每一維的長(zhǎng)度,也可省去第一維的長(zhǎng)度。因此,以下寫法都是合法的。
intmax(inta[3][10])或
intmax(inta[][10])287.8
變量的作用域
變量有效性的范圍稱為變量的作用域。C語言中的變量,按作用域范圍可分為兩種:局部變量和全局變量。
1)局部變量(也稱為內(nèi)部變量)在函數(shù)體的聲明部分定義。其作用域僅限于本函數(shù)內(nèi),離開本函數(shù)后不能再使用這個(gè)變量。
2)全局變量(也稱為外部變量)在函數(shù)外部定義的變量。它不屬于哪一個(gè)函數(shù),它的作用域是整個(gè)文件。
注意:同一個(gè)源文件中,在不同作用域內(nèi)可以定義同名變量,在使用時(shí),作用域小的變量屏蔽作用域大的變量。297.8
變量的作用域 1.局部變量
局部變量也稱為內(nèi)部變量。局部變量是在函數(shù)內(nèi)作定義的,其作用域僅限于函數(shù)內(nèi),離開該函數(shù)后再使用這種變量是非法的。
【例7_7】局部變量的作用域。
intf1(inta)/*函數(shù)f1*/ { intb,c;//a,b,c有效
} voidmain() { intm,n;//m,n有效
}307.8
變量的作用域 1.局部變量
關(guān)于局部變量的作用域還要說明以下幾點(diǎn): (1)主函數(shù)中定義的變量也只能在主函數(shù)中使用,不能在其它函數(shù)中使用。同時(shí),主函數(shù)中也不能使用其它函數(shù)中定義的變量。原因在于主函數(shù)也是一個(gè)函數(shù),它與其它函數(shù)是平行關(guān)系。 (2)形參變量是屬于被調(diào)函數(shù)的局部變量,實(shí)參變量是屬于主調(diào)函數(shù)的局部變量。 (3)允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對(duì)象,分配不同的單元,互不干擾,也不會(huì)發(fā)生混淆。 (4)在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語句范圍內(nèi)。317.8
變量的作用域 1.局部變量
【例7_8】復(fù)合語句中定義的局部變量的作用域。
#include<stdio.h> voidmain() {inti=2,j=3,k; k=i+j; {intk=8; printf("%d\n",k); } printf("%d\n",k);}327.8
變量的作用域
2.全局變量 全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個(gè)函數(shù),它屬于一個(gè)源文件,其作用域是整個(gè)源文件。 只有在函數(shù)內(nèi)經(jīng)過聲明的全局變量才能使用。全局變量的聲明符為extern。但在一個(gè)函數(shù)之前定義的全局變量,在該函數(shù)內(nèi)使用可不再加以聲明。
【例7_9】全局變量的作用域。
inta,b;/*外部變量*/ voidf1()/*函數(shù)f1*/ {externx,y;/*聲明外部變量*/} floatx,y;/*外部變量*/ voidmain()/*主函數(shù)*/ {}337.8
變量的作用域 2.全局變量
【例7_10】輸入正方體的長(zhǎng)寬高l、w、h。求體積及三個(gè)面x*y、x*z、y*z的面積。
#include<stdio.h> ints1,s2,s3; intvs(inta,intb,intc) {intv;v=a*b*c; s1=a*b;s2=b*c;s3=a*c; returnv; } voidmain() {intv,l,w,h; printf("inputlength,widthandheight:\n"); scanf("%d%d%d",&l,&w,&h); v=vs(l,w,h); printf("v=%d,s1=%d,s2=%d,s3=%d\n",v,s1,s2,s3); }347.8
變量的作用域
2.全局變量
【例7_11】全局變量與局部變量同名。
#include<stdio.h> inta=3,b=5;/*a,b為全局變量*/ intmax(inta,intb)/*a,b為內(nèi)部變量*/ { intc;c=a>b?a:b; return(c); } voidmain() { inta=8; printf("%d\n",max(a,b)); }357.9
變量的存儲(chǔ)類別 1.動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式
1)靜態(tài)存儲(chǔ)方式及靜態(tài)存儲(chǔ)區(qū) 靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式。全局變量全部存放在靜態(tài)存儲(chǔ)區(qū),在程序開始執(zhí)行時(shí)給全局變量分配存儲(chǔ)區(qū),程序行完畢就釋放。在程序執(zhí)行過程中它們占據(jù)固定的存儲(chǔ)單元,而不是動(dòng)態(tài)地進(jìn)行分配和釋放。
2)動(dòng)態(tài)存儲(chǔ)方式及動(dòng)態(tài)存儲(chǔ)區(qū) 動(dòng)態(tài)存儲(chǔ)方式是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。在函數(shù)開始調(diào)用時(shí)分配動(dòng)態(tài)存儲(chǔ)空間,函數(shù)結(jié)束時(shí)釋放這些空間367.9
變量的存儲(chǔ)類別 2.用auto聲明動(dòng)態(tài)局部變量
函數(shù)中的局部變量,如不專門聲明為static存儲(chǔ)類別,都是動(dòng)態(tài)地分配存儲(chǔ)空間的,數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中。函數(shù)中的形參和在函數(shù)中定義的變量(包括在復(fù)合語句中定義的變量),都屬此類。在調(diào)用該函數(shù)時(shí)系統(tǒng)會(huì)給它們分配存儲(chǔ)空間,在函數(shù)調(diào)用結(jié)束時(shí)就自動(dòng)釋放這些存儲(chǔ)空間。這類局部變量稱為自動(dòng)變量。自動(dòng)變量用關(guān)鍵字auto進(jìn)行存儲(chǔ)類別的聲明。關(guān)鍵字auto可以省略,隱含為自動(dòng)存儲(chǔ)類別,屬于動(dòng)態(tài)存儲(chǔ)方式。
intf(inta)//定義f函數(shù),a為參數(shù)
{ autointb,c=3;//定義b,c自動(dòng)變量
…… }
執(zhí)行完f函數(shù)后,自動(dòng)釋放a、b和c所占的存儲(chǔ)單元。377.9
變量的存儲(chǔ)類別 3.用static聲明靜態(tài)局部變量 函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,指定局部變量為靜態(tài)局部變量,用關(guān)鍵字static進(jìn)行聲明。
【例7_12】考察靜態(tài)局部變量的值。
#include<stdio.h> intf(inta) {autob=0;staticc=3; b=b+1;c=c+1; return(a+b+c); } voidmain() {inta=2,i; for(i=0;i<3;i++)printf("%d\n",f(a)); }387.9
變量的存儲(chǔ)類別
3.用static聲明靜態(tài)局部變量
靜態(tài)局部變量和動(dòng)態(tài)局部變量的區(qū)別: (1)靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 托班冬天有趣課程設(shè)計(jì)
- 自動(dòng)插線機(jī)課程設(shè)計(jì)
- 研學(xué)紅色教育課程設(shè)計(jì)
- 牙齒矯正牽引課程設(shè)計(jì)
- 藝人練習(xí)生課程設(shè)計(jì)
- 承德護(hù)理職業(yè)學(xué)院《科學(xué)研究方法與論文寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年版特定事項(xiàng)連帶保證協(xié)議版B版
- 2024文化創(chuàng)意產(chǎn)業(yè)合作開發(fā)協(xié)議
- 2024年綠色能源項(xiàng)目?jī)?nèi)部股東股權(quán)轉(zhuǎn)讓與權(quán)益調(diào)整協(xié)議3篇
- 2025年度:區(qū)塊鏈技術(shù)應(yīng)用合同標(biāo)的數(shù)字資產(chǎn)安全3篇
- 《詩經(jīng)》簡(jiǎn)介 完整版PPT
- 紫草科旋花科馬鞭草科唇形科茄科課件
- 部編版七年級(jí)語文上冊(cè)(課本全冊(cè))課后習(xí)題參考答案
- 2022-2023學(xué)年成都市高二上英語期末考試題(含答案)
- 大學(xué)英語語法專項(xiàng)練習(xí)題及答案
- 高中英語高頻詞匯拓展延伸
- 2023年浙江杭州西湖文化旅游投資集團(tuán)有限公司招聘筆試題庫含答案解析
- 班主任名工作室個(gè)人工作總結(jié)6篇 名班主任工作室總結(jié)
- 巧克畢業(yè)論文(南昌大學(xué))超星爾雅學(xué)習(xí)通網(wǎng)課章節(jié)測(cè)試答案
- 大象版二年級(jí)科學(xué)上冊(cè)期末試卷(及答案)
- 榕江縣銻礦 礦業(yè)權(quán)出讓收益計(jì)算結(jié)果的報(bào)告
評(píng)論
0/150
提交評(píng)論