C語言中文網 目錄

有參函數,C語言有參函數詳解

從形式上看,函數可分為兩類:無參函數有參函數

所謂無參函數,是指在主調函數調用被調函數時,主調函數不向被調函數傳遞數據。無參函數一般用來執行特定的功能,可以有返回值,也可以沒有返回值,但一般以沒有返回值居多。

有參函數,是指在主調函數調用被調函數時,主調函數通過參數向被調函數傳遞數據。在一般情況下,有參函數在執行被調函數時會得到一個值并返回給主調函數使用。

有參函數是重點,我們主要介紹有參函數。

有參函數

定義有參函數的一般形式為:

函數類型 函數名(參數類型1 參數名1, 參數類型2 參數名2, …, 參數類型n 參數名n)
{
   聲明部分
   語句部分
}

參數可以是一個,也可以是多個。下面給大家舉一個例子:
# include <stdio.h>
int main(void)
{   
    int Max(int x, int y);  //對Max函數的聲明, x、y稱為形參
    int a = 1, b = 2;
    printf("max = %d\n", Max(a, b));  //a、b稱為實參
    return 0;
}
//定義Max函數
int Max(int x, int y)
{
    int z;  //函數體中的聲明部分
    if (x > y)  //下面是語句部分
    {
        z = x;
    }
    else
    {
        z = y;
    }
    return (z);  //返回z的值給主調函數使用
}
輸出結果是:
max = 2

這個程序分兩個部分,一個是主函數 main,另一個是自定義的函數 Max。Max 函數在主函數 main 的下面,它有兩個參數,它的功能是求出 x 和 y 二者中的最大值。

形參和實參

下面先來講一下“形參”和“實參”的概念。

在定義 Max 函數時,函數名 Max 后面括號中的參數 x、y 稱為形式參數,簡稱形參。而在主調函數 main 中調用 Max 函數時,Max 函數名后面括號中的參數 a、b 稱為實際參數,簡稱實參。實參可以是常量、變量或表達式,但它們必須要有確定的數值。在調用被調函數時將實參的值賦給形參。

在定義函數時,必須要指定形參的類型。實參與形參的個數必須相等,若不相等就是語法錯誤。此外,實參與形參的類型要相同或賦值兼容。最好是相同,這樣不容易出錯。如果不相同則實參按形參的類型轉化,然后再送給形參。

在傳遞數據時,實參與形參是按順序一一對應的。在 C 語言中,實參向形參的數據傳遞是“值傳遞”、單向傳遞,即只能由實參傳給形參,不能由形參傳回給實參。因此在執行被調函數時,形參的值如果發生改變,并不會改變主調函數中實參的值。

而且,在未出現函數調用時,形參并不占用內存中的存儲單元。只有在發生函數調用時,函數 Max 中的形參才會被分配內存單元。調用結束后,形參所占的內存單元隨之會被釋放。

定義函數時,第一行“int Max(int x,int y)”稱為函數首部。函數首部有兩個數據類型,一個是“函數類型”,另一個是“參數類型”。函數名左邊的類型叫“函數類型”,或“函數的返回值類型”。如果不想要返回值,那么這里就寫 void。若使用 void 就不能有返回值,否則就是語法錯誤。需要注意的是,不能有返回值不代表不能有return語句:

return;

這也是正確的。只要 return 后面什么都不加就行,因為什么都不加也表示沒有返回值。整個 return 語句全部都不寫也可以。但是如果需要跳出被調函數的話就寫上“return;”。

函數名后面括號中的數據類型是所傳遞的參數的類型。如果不希望定義的函數接收數據,或者說不想有參數傳遞進來,那么這里就寫 void 或什么都不寫,比如 int Max(void)。這就表示拒絕接受數據傳遞,這樣實參的值就傳不進來了。主函數 main 的首部都是這么寫的:

int main(void)

即不允許有值傳遞進來。但是,如果被調函數的參數類型定義成 void,那么主調函數在調用它的時候就不能有實參,否則也是語法錯誤。

此外,如果函數名后面括號中什么都不寫,那么默認的也是 void。

綜上所述,函數首部的兩個數據類型是不一樣的。一個函數可以有返回值,也可以沒有返回值;可以接收數據,也可以不接收數據。這個就是通過這兩個數據類型控制的。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo