本節講解有參函數和無參函數的定義。
無參函數定義的一般形式如下:
類型標識符 函數名(){
聲明部分
語句
}
其中類型標識符和函數名稱為函數頭。類型標識符指明了本函數的類型,函數的類型實際上是函數返回值的類型。該類型標識符與前面介紹的各種說明符相同。函數名是由用戶定義的標識符,函數名後有一個空括號,其中無參數,但括號不可少。
{}中的內容稱為函數體。在函數體中聲明部分,是對函數體內部所用到的變量的類型說明。
在很多情況下都不要求無參函數有返回值,此時函數類型符可以寫為void。
我們可以改寫一個函數定義:
void Hello(){ printf ("Hello,world \n"); }
這裡,只把main改為Hello作為函數名,其余不變。Hello函數是一個無參函數,當被其它函數調用時,輸出Hello world字符串。
有參函數定義的一般形式如下:
類型標識符 函數名(形式參數表列){
聲明部分
語句
}
有參函數比無參函數多了一個內容,即形式參數表列。在形參表中給出的參數稱為形式參數,它們可以是各種類型的變量,各參數之間用逗號間隔。在進行函數調用時,主調函數將賦予這些形式參數實際的值。形參既然是變量,必須在形參表中給出形參的類型說明。
例如,定義一個函數,用於求兩個數中的大數,可寫為:
int max(int a, int b){ if (a>b) return a; else return b; }
第一行說明max函數是一個整型函數,其返回的函數值是一個整數。形參為a,b,均為整型量。a,b的具體值是由主調函數在調用時傳送過來的。在{}中的函數體內,除形參外沒有使用其它變量,因此只有語句而沒有聲明部分。在max函數體中的return語句是把a(或b)的值作為函數的值返回給主調函數。有返回值函數中至少應有一個return語句。
在C程序中,一個函數的定義可以放在任意位置,既可放在主函數main之前,也可放在main之後。例如:可把max 函數置在main之後,也可以把它放在main之前。修改後的程序如下所示。
【例8-1】函數定義示例
#include <stdio.h> int max(int a,int b){ if(a>b)return a; else return b; } int main(void){ int max(int a,int b); int x,y,z; printf("input two numbers:\n"); scanf("%d%d",&x,&y); z=max(x,y); printf("maxmum=%d",z); return 0; }
現在我們可以從函數定義、函數說明及函數調用的角度來分析整個程序,從中進一步了解函數的各種特點。
程序的第1行至第4行為max函數定義。進入主函數後,因為准備調用max函數,故先對max函數進行說明(程序第6行)。函數定義和函數說明並不是一回事,在後面還要專門討論。 可以看出函數說明與函數定義中的函數頭部分相同,但是末尾要加分號。程序第10行為調用max函數,並把x、y中的值傳送給max的形參a、b。max函數執行的結果(a或b)將返回給變量z。最後由主函數輸出z的值。