逍遙自在學C語言 | 函數初級到高級解析
前言
函數是C語言中的基本構建塊之一,它允許我們將代碼組織成可重用、模塊化的單元。
本文將逐步介紹C語言函數的基礎概念、參數傳遞、返回值、遞歸以及內聯函數和匿名函數。
一、人物簡介
- 第一位閃亮登場,有請今后會一直教我們C語言的老師 —— 自在。

- 第二位上場的是和我們一起學習的小白程序猿 —— 逍遙。

二、基礎概念
-
函數是一個獨立的代碼塊,可以接收輸入參數并執行特定任務。
-
它可以用于執行特定的操作或計算,并可以返回一個值(可選)。
-
以下是一個簡單的示例:
#include <stdio.h>
// 聲明函數
int addNumbers(int a, int b) {
int sum = a + b;
return sum;
}
int main() {
// 調用函數
int result = addNumbers(3, 4);
printf("兩數之和:%d\n", result);
return 0;
}
-
上述代碼中,我們聲明了一個名為
addNumbers的函數,它接收兩個整數參數并返回它們的和。 -
在
main函數中,我們調用了addNumbers函數,并將結果打印到控制臺上。 -
運行結果
兩數之和:7
三、參數傳遞
- 函數可以通過參數接收外部傳入的數據。
- 在C語言中,有兩種參數傳遞的方式:按值傳遞和按引用傳遞。
- 代碼示例
#include <stdio.h>
// 按值傳遞
void incrementByValue(int num) {
num += 1;
}
// 按引用傳遞
void incrementByReference(int* numPtr) {
(*numPtr) += 1;
}
int main() {
int num = 5;
incrementByValue(num);
printf("按值傳遞后的值:%d\n", num);
incrementByReference(&num);
printf("按引用傳遞后的值:%d\n", num);
return 0;
}
-
在上面的示例中,我們定義了兩個函數
incrementByValue和incrementByReference。 -
incrementByValue按值傳遞參數,即在函數內部對參數的修改不會影響到原始變量。 -
而
incrementByReference按引用傳遞參數,通過傳遞指針的方式,可以在函數內部修改原始變量的值。 -
運行結果
按值傳遞后的值:5
按引用傳遞后的值:6
四、返回值
函數可以返回一個值,這使得我們可以從函數中獲取計算結果或執行狀態。
#include <stdio.h>
// 返回兩個數中較大的數
int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
int main() {
int a = 3;
int b = 4;
int maxValue = max(a, b);
printf("較大的數:%d\n", maxValue);
return 0;
}
-
在上述示例中,
max函數接收兩個整數參數并返回較大的數。 -
在
main函數中,我們調用max函數,并將結果打印到控制臺上。 -
運行結果
較大的數:4
五、遞歸函數
-
遞歸是一種函數調用自身的技術。
-
它在解決一些問題時非常有用,如計算階乘、斐波那契數列等。
-
代碼示例
#include <stdio.h>
// 計算階乘
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int num = 5;
int result = factorial(num);
printf("%d的階乘:%d\n", num, result);
return 0;
}
-
在上面的示例中,
factorial函數使用遞歸的方式計算一個數的階乘。 -
在
main函數中,我們調用factorial函數,并將結果打印到控制臺上。 -
運行結果
5的階乘:120
六、內聯函數
-
內聯函數是一種函數調用的優化方式,編譯器會將函數的代碼直接嵌入到調用該函數的地方,而不是通過函數調用的方式進行執行。
-
內聯函數的好處是可以減少函數調用的開銷,提高程序的執行效率。
-
使用內聯函數可以通過在函數定義前加上關鍵字
inline來標識。 -
代碼示例
#include <stdio.h>
// 內聯函數
inline int square(int num) {
return num * num;
}
int main() {
int result = square(5);
printf("平方:%d\n", result);
return 0;
}
-
在上述示例中,我們定義了一個內聯函數
square,它計算一個數的平方。 -
在
main函數中,我們調用square函數,并將結果打印到控制臺上。 -
運行結果
平方:25
七、匿名函數
- C語言本身不直接支持匿名函數,但可以使用函數指針和函數指針結構體來模擬匿名函數的功能。
- 代碼示例
#include <stdio.h>
// 匿名函數模擬
typedef int (*Operation)(int, int);
int performOperation(int a, int b, Operation op) {
return op(a, b);
}
int main() {
Operation add = [](int a, int b) {
return a + b;
};
int result = performOperation(3, 4, add);
printf("結果:%d\n", result);
return 0;
}
-
在上述示例中,我們使用函數指針結構體
Operation來模擬匿名函數。 -
我們定義了一個匿名函數
add,它實現了兩個數的加法運算。然后,我們將add函數作為參數傳遞給performOperation函數,并打印結果到控制臺上。 -
運行結果
結果:7
小結
通過這篇文章,我們學會了
1、函數的概念,參數傳遞,函數返回值
2、遞歸函數
3、內聯函數
4、匿名函數
??歡迎各位 ??點贊 ?收藏 ??評論,如有錯誤請留言指正,非常感謝!

浙公網安備 33010602011771號