函數>函數定義的一般形式 函數定義的一般形式 1.無參數函數的定義形式 類型識別字 函數名() { 變數宣告部分 語句 } 其中類型識別字和函數名稱為函數頭。類型識別字指明了本函數的類型,函數的類型實際上是函數返回值的類型。 該類型識別字與前面介紹的各種說明符相同。函數名是由用戶定義的識別字,函數名後有一個空括弧,其中無參數,但括弧不可少。 {}中的內容稱為函數主體。在函數主體中變數宣告部分,是對函數中所用到的變數的類型說明。 在很多情況下都不要求無參函數有返回值,此時函數類型符可以寫為void。 我們可以改寫一個函數定義:
這裏,只把main改為Hello()作為函數名,其餘不變。Hello()函數是一個無參數函數,當被其他函數使用時,就會在螢幕上輸出 "Hello,world"。
2.有參數函數定義的一般形式 類型識別字 函數名稱(參數表列) { 變數宣告部分 語句 } 函數的參數,它們可以是各種類型的變數,各參數之間用逗號間隔。在進行函數使用時,主函數將賦予這些參數實際的值。參數既然是變數,必須在參數表中給出參數的類型說明。 例如,定義一個函數,用於求兩個數中的大數,可寫為:
第一行說明max函數是一個整數函數,其返回的函數值是一個整數。參數為 a,b 均為整數。 a,b 的具體值是由主調函數在使用時傳送過來的。在{}中的函數內,除參數外沒有使用其他變數,因此只有語句而沒有聲明部分。在max函數體中的return語句是把a(或b)的值作為函數的值返回給主函數。有返回值函數中至少應有一個return語句。 在C程式中,一個函數的定義可以放在任意位置,既可放在主函數main之前,也可放在main之後。如果放在main()之後,必須要先宣告該函數。有四種方式,如以下範例。 例如: 可把max 函數置在main之後,也可以把它放在main之前。修改後的程式如下所示。 【例】
現在我們可以從函數定義、函數說明及函數使用的角度來分析整個程式,從中進一步瞭解函數的各種特點。 程式的第1行至第5行為max函數定義。進入主函數後,因為準備使用max函數,故先對max函數進行說明。函數定義和函數說明並不是一回事,在後面還要專門討論。 可以看出函數說明與函數定義中的函數頭部分相同,但是末尾要加分號。程式第12 行為使用max函數,並把x, y中的值傳送給max的參數a, b。max函數執行的結果(a或b)將返回給變數z。最後由主函數輸出z的值。 3.函數的返回值 函數的值是指函數被使用之後,執行函數體中的程式段所取得的並返回給主調函數的值。如使用正弦函數取得正弦值,使用範例的max函數取得的最大數等。對函數的值(或稱函數返回值)有以下一些說明: 1) 函數的值只能通過return語句返回主函數。 return 語句的一般形式為: return 運算式; 或 return 變數; 或者為: return (運算式); 該語句的功能是計算運算式的值,並返回給主函數。在函數中允許有多個return語句,但每次使用只能有一個return 語句被執行,因此只能返回一個函數值。 2) 函數值的類型和函數定義中函數的類型應保持一致。如果兩者不一致,則以函數類型為准,自動進行類型轉換。 3) 如函數值為整型,在函數定義時可以省去類型說明。 4) 不返回函數值的函數,可以明確定義為“空類型”,類型說明符為“void”。如:函數 s並不向主函數返函數值,因此可定義為: void s(int n) { …… } 一旦函數被定義為空類型後,就代表該函數沒有回傳值。例如,在定義 s為空類型後,在主函數中寫下述語句 sum=s(n); 就是錯誤的。 為了使程式有良好的可讀性並減少出錯, 凡不要求返回值的函數都應定義為空類型。
|