在本教程中,您將借助示例學(xué)習(xí)在C語(yǔ)言編程中創(chuàng)建用戶定義的函數(shù)。
函數(shù)是執(zhí)行特定任務(wù)的代碼塊。
C允許您根據(jù)需要定義函數(shù)。這些函數(shù)稱為用戶定義函數(shù)。例如:
假設(shè)您需要?jiǎng)?chuàng)建一個(gè)圓并根據(jù)半徑和顏色為其著色。您可以創(chuàng)建兩個(gè)函數(shù)來(lái)解決此問(wèn)題:
createCircle() 函數(shù)
color() 函數(shù)
這是添加兩個(gè)整數(shù)的示例。為了執(zhí)行此任務(wù),我們創(chuàng)建了一個(gè)用戶定義的addNumbers()。
#include <stdio.h> int addNumbers(int a, int b); //函數(shù)原型 int main() { int n1,n2,sum; printf("輸入兩個(gè)數(shù)字: "); scanf("%d %d",&n1,&n2); sum = addNumbers(n1, n2); // 函數(shù)調(diào)用 printf("sum = %d",sum); return 0; } int addNumbers(int a, int b) //函數(shù)定義 { int result; result = a+b; return result; //返回語(yǔ)句 }
函數(shù)原型只是函數(shù)的聲明,用于指定函數(shù)的名稱,參數(shù)和返回類型。它不包含函數(shù)體。
函數(shù)原型向編譯器提供信息,該函數(shù)以后可以在程序中使用。
returnType functionName(type1 argument1, type2 argument2, ...);
在上面的示例中,函數(shù)原型int addNumbers(int a, int b);為編譯器提供了以下信息:
函數(shù)的名稱是 addNumbers()
函數(shù)的返回類型是 int
類型的兩個(gè)參數(shù)int傳遞給函數(shù)
如果在main()函數(shù)之前定義了用戶定義的函數(shù),則不需要函數(shù)原型。
程序的控制權(quán)通過(guò)調(diào)用轉(zhuǎn)移到用戶定義的函數(shù)。
functionName(argument1, argument2, ...);
在上面的示例中,使用main()函數(shù)內(nèi)部的語(yǔ)句進(jìn)行函數(shù)addNumbers(n1, n2);調(diào)用。
函數(shù)定義包含執(zhí)行特定任務(wù)的代碼塊。在我們的示例中,將兩個(gè)數(shù)字相加并返回。
函數(shù)定義的語(yǔ)法
returnType functionName(type1 argument1, type2 argument2, ...) { //函數(shù)體 }
調(diào)用函數(shù)時(shí),程序的控制權(quán)將轉(zhuǎn)移到函數(shù)定義中。并且,編譯器開始在函數(shù)體內(nèi)執(zhí)行代碼。
在編程中,參數(shù)是指?jìng)鬟f給函數(shù)的變量。在上面的示例中,在函數(shù)調(diào)用期間傳遞了兩個(gè)變量n1和n2。
參數(shù)a和b接受函數(shù)定義中傳遞的參數(shù)。這些參數(shù)稱為函數(shù)的形式參數(shù)。
傳遞給函數(shù)的參數(shù)類型和形式參數(shù)必須匹配,否則,編譯器將引發(fā)錯(cuò)誤。
如果n1是char類型,a也應(yīng)該是char類型。如果n2為浮點(diǎn)型,則變量b也應(yīng)為浮點(diǎn)型。
也可以在不傳遞參數(shù)的情況下調(diào)用函數(shù)。
return語(yǔ)句終止函數(shù)的執(zhí)行并將值返回給調(diào)用函數(shù)。返回語(yǔ)句之后,程序控制權(quán)將轉(zhuǎn)移到調(diào)用函數(shù)。
在上面的示例中,result變量的值返回到主函數(shù)。main()函數(shù)中的sum變量被分配了該值。
return (expression);
例如,
return a; return (a+b);
從函數(shù)返回的值的類型與函數(shù)原型和函數(shù)定義中指定的返回類型必須匹配。
訪問(wèn)此頁(yè)面以了解有關(guān)傳遞參數(shù)和從函數(shù)返回值的更多信息。