第 1 頁(yè):6.1 函數(shù)定義 |
第 2 頁(yè):6.2 函數(shù)調(diào)用 |
第 3 頁(yè):6.3 函數(shù)說(shuō)明 |
第 4 頁(yè):6.4 函數(shù)調(diào)用中的數(shù)據(jù)傳遞方式 |
第 5 頁(yè):6.5 返回指針的函數(shù) |
第 6 頁(yè):6.6 函數(shù)遞歸調(diào)用 |
6.2 函數(shù)調(diào)用
函數(shù)被定義以后,凡要實(shí)現(xiàn)函數(shù)功能的地方,就可簡(jiǎn)單地通過(guò)函數(shù)調(diào)用來(lái)完成。按函數(shù)調(diào)用在程序中的作用,有兩種不同類(lèi)型的應(yīng)用:
(1)函數(shù)調(diào)用只是利用函數(shù)所完成的功能。此時(shí),將函數(shù)調(diào)用作為一個(gè)獨(dú)立的語(yǔ)句。其調(diào)用的一般形式為
函數(shù)名(實(shí)際參數(shù)表);
這種應(yīng)用不要求或程序不利用函數(shù)的返回值。如程序中經(jīng)常調(diào)用格式輸入函數(shù)scanf()和格式輸出函數(shù)printf()等。
(2)函數(shù)調(diào)用是利用函數(shù)的返回值。其調(diào)用的一般形式為
函數(shù)名(實(shí)際參數(shù)表)
這種應(yīng)用是利用返回值繼續(xù)進(jìn)行表達(dá)式的計(jì)算,或輸出函數(shù)返回值等。
函數(shù)調(diào)用時(shí)提供的實(shí)際參數(shù)按它們出現(xiàn)的順序與函數(shù)定義中的形式參數(shù)-一對(duì)應(yīng),并要求實(shí)際參數(shù)類(lèi)型與其對(duì)應(yīng)的形式參數(shù)類(lèi)型相一致。一般情況下,函數(shù)調(diào)用應(yīng)為函數(shù)定義中的每個(gè)形式參數(shù)提供實(shí)際參數(shù),當(dāng)有多個(gè)實(shí)際參數(shù)時(shí),實(shí)際參數(shù)之間用逗號(hào)分隔。
函數(shù)調(diào)用的執(zhí)行過(guò)程描述如下:
(1)為函數(shù)的形式參數(shù)分配內(nèi)存空間;
(2)計(jì)算實(shí)際參數(shù)表達(dá)式的值,并將實(shí)際參數(shù)表達(dá)式的值賦給對(duì)應(yīng)的形式參數(shù);
(3)為函數(shù)的局部變量分配內(nèi)存空間;
(4)執(zhí)行函數(shù)體內(nèi)的語(yǔ)句序列;
(5)函數(shù)體執(zhí)行完成,或執(zhí)行了函數(shù)體內(nèi)的return語(yǔ)句(若return語(yǔ)句帶表達(dá)式,則計(jì)算出該表達(dá)式的值,并以此值作為函數(shù)的返回值)后,釋放為這次函數(shù)調(diào)用分配的全部?jī)?nèi)存空間;
(6)將函數(shù)值(如果有)返回到函數(shù)調(diào)用處繼續(xù)執(zhí)行。
下面以簡(jiǎn)單的程序例子說(shuō)明函數(shù)調(diào)用的執(zhí)行過(guò)程。
【例6.l】函數(shù)調(diào)用時(shí),由實(shí)際參數(shù)向函數(shù)形式參數(shù)傳遞值的示意程序。
# include
double x,y,d;
double min(double a,double b)
{double temp;
temp=a> b? b :a;
return temp;
}
void main()
{ printf(“Enter x, y.\n”);
scanf(“%lf%lf”,&x,&y);
d=min(x,y);
printf(“MIN(%.3f,%.3f=%.3f\n”, x, y,d)
}
以上示意程序的大致執(zhí)行過(guò)程如下:
首先執(zhí)行主函數(shù)的第一個(gè)語(yǔ)句,調(diào)用格式輸出函數(shù)輸出提示信息。接著調(diào)用格式輸入函數(shù),等待用戶(hù)輸入數(shù)據(jù)。用戶(hù)看到程序輸出的提示信息,輸入數(shù)據(jù),輸入的數(shù)據(jù)被格式輸入函數(shù)所接受,并將輸入數(shù)據(jù)譯成內(nèi)部形式后,存入變量X和y。接著執(zhí)行賦值語(yǔ)句,求右瑞表達(dá)式的值。該表達(dá)式以x和y的值為實(shí)際參數(shù),調(diào)用函數(shù)main()。對(duì)函數(shù)min()的調(diào)用發(fā)生時(shí),系統(tǒng)先保留好控制的返回點(diǎn)。在執(zhí)行被調(diào)用函數(shù)min()之前,先為函數(shù)的形式參數(shù)a和b分配存儲(chǔ)單元,并以它們對(duì)應(yīng)的實(shí)際參數(shù)表達(dá)式的植給它們賦初值。接著為函數(shù)內(nèi)部的變量(稱(chēng)為局部變量)分配存儲(chǔ)單元。之后才開(kāi)始執(zhí)行被調(diào)用函數(shù)體中的語(yǔ)句。執(zhí)行完函數(shù)體的語(yǔ)句,或執(zhí)行了return語(yǔ)句,函數(shù)準(zhǔn)備返回。在返回之前先將形式參數(shù)和局部變量所占用的存儲(chǔ)單元全部釋放。函數(shù)返回時(shí),將函數(shù)的返回值帶回調(diào)用處,從原先保留的控制返回點(diǎn),繼續(xù)執(zhí)行,將函數(shù)調(diào)用的返回值存于變量d,輸出結(jié)果,結(jié)束程序。綜上所述,函數(shù)調(diào)用時(shí),系統(tǒng)要做許多輔助工作,函數(shù)調(diào)用時(shí)發(fā)生的數(shù)據(jù)傳遞最主要的是實(shí)際參數(shù)向形式參數(shù)傳遞數(shù)據(jù)和函數(shù)的返回值傳遞給調(diào)用處。為正確編寫(xiě)函數(shù),實(shí)現(xiàn)函數(shù)調(diào)用所希望的要求,需正確了解以下幾項(xiàng)內(nèi)容:
(1)當(dāng)函數(shù)執(zhí)行return語(yǔ)句或執(zhí)行完函數(shù)體的語(yǔ)句序列后,函數(shù)的這次調(diào)用就執(zhí)行結(jié)束,隨之將控制返回到函數(shù)調(diào)用處繼續(xù)執(zhí)行。
(2)函數(shù)的返回值是通過(guò)執(zhí)行return語(yǔ)句時(shí),計(jì)算return之后的表達(dá)式值而獲得的。如果函數(shù)不提供返回值,則return語(yǔ)句不應(yīng)包含表達(dá)式。
(3)如果函數(shù)有返回值,則應(yīng)有確定的類(lèi)型,并在函數(shù)定義時(shí)指明。同時(shí),return語(yǔ)句的表達(dá)式類(lèi)型應(yīng)與函數(shù)定義中指明的返回值類(lèi)型相一致。
(4)為了明確指明函數(shù)不提供返回值,建議在函數(shù)定義時(shí),在函數(shù)名之前寫(xiě)上void。并在這樣的函數(shù)體內(nèi),所有的return語(yǔ)句都不應(yīng)該帶表達(dá)式。
相關(guān)推薦:2010年計(jì)算機(jī)軟件水平考試時(shí)間安排通知北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |