程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言自定義函數

C語言自定義函數

編輯:C語言基礎知識
函數是一段可以重復使用的代碼,用來獨立地完成某個功能,它可以接收用戶傳遞的數據,也可以不接收。

無參函數的定義

如果函數不接收用戶傳遞的數據,那麼定義時可以不帶參數。如下所示:

返回值類型  函數名(){
    函數體
}

說明:
  • 返回值類型可以是C語言中的任意數據類型,例如 int、float、char 等。
  • 函數名是標識符的一種,命名規則和標識符相同。函數名後面的括號( )不能少。
  • 函數體是函數需要執行的代碼。即使只有一個語句,也要由{ }包圍。
  • 在函數體中使用return語句返回數據。

例如,定義一個函數,計算1加到100的結果:
int sum(){
    int i, sum=0;
    for(i=1; i<=100; i++){
        sum+=i;
    }
    return sum;
}
計算結果保存在變量sum中,通過return語句返回。sum為int型,所以返回值類型也必須為int,要一一對應。

return是C語言中的一個關鍵字,只能用在函數中,用來返回處理結果。

將上面的代碼補充完整:
#include <stdio.h>

int sum(){
    int i, sum=0;
    for(i=1; i<=100; i++){
        sum+=i;
    }
    return sum;
}

int main()
{
    int a = sum();
    printf("The sum is %d\n", a);
    return 0;
}
運行結果:
The sum is 5050

函數不能嵌套定義,main 也是一個函數定義,要將 sum 放在 main 外面。函數必須先定義後使用,所以 sum 只能在 main 前面。
注意:main 是函數定義,不是函數調用。當可執行文件加載到內存後,系統從 main 函數開始執行,也就是說,系統會調用我們定義的 main 函數。

無返回值函數

有的函數不需要有返回值,或者返回值類型不確定(很少見),那麼用void表示,例如:
void hello(){
    printf ("Hello,world \n");
    //沒有返回值就不需要 return 語句
}
void是C語言中的一個關鍵字,表示空類型或無類型,絕大部分情況下也就意味著沒有 return 語句。

有參函數的定義

如果函數需要接收用戶傳遞的數據,那麼定義時就要帶參數。如下所示:

返回值類型  函數名(參數列表){
    函數體
}

用戶數據通過“參數列表”傳遞給函數,供函數處理。例如,定義一個函數求兩個數中的最大值:
int max(int a, int b){
    if (a>b){
        return a;
    }else{
        return b;
    }
}
參數(Parameter)本質上也是變量,定義時要指明參數類型和參數名稱。參數列表中可以定義一個或多個參數,多個參數之間用逗號,分隔。參數列表中給出的參數可以在函數體中使用。

調用 max() 函數時可以直接傳遞整數:
int n = max(10, 20);
也可以傳遞變量:
int a = 10, b = 20;
int n = max(a, b);
也可以整數和變量一起傳遞:
int a = 10;
int n = max(a, 20);
變量 n 得到的值都是20。

函數定義時給出的參數稱為形式參數,簡稱形參;函數調用時給出的參數(傳遞的數據)稱為實際參數,簡稱實參。函數調用時,將實參的值傳遞給形參,相當於一次賦值操作。注意:實參和形參的類型、數目必須一致。

將上面的代碼補充完整:
#include <stdio.h>

int max(int a, int b){
    if (a>b){
        return a;
    }else{
        return b;
    }
}

int main(){
    int num1, num2, maxVal;
    printf("Input two numbers: ");
    scanf("%d %d", &num1, &num2);
    maxVal = max(num1, num2);
    printf("The max number: %d\n", maxVal);

    return 0;
}
運行結果:
Input two numbers: 100 200
The max number: 200

定義max時,變量a、b的值都是未知的;調用max時,分別將num1、num2的值傳遞給a、b,類似於:
a=num1;
b=num2;
return 語句可以有多個,可以在函數體的任意位置。在max中,根據 if 的判斷結果來執行不同的 return 語句。

函數一旦遇到 return 語句就返回(停止執行),後面的所有語句都不會被執行到,例如:
int max(int a, int b){
    int n = (a>b) ? a : b;
    return n;
    printf("Function is performed\n");
}
第4行代碼是多余的,永遠沒有執行的機會。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved