前言
函式是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 = https://www.cnblogs.com/Wayne123/archive/2023/06/28/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、匿名函式
??歡迎各位 ??點贊 ?收藏 ??評論,如有錯誤請留言指正,非常感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556224.html
標籤:其他
上一篇:C++面試八股文:知道std::unordered_set/std::unordered_map嗎?
下一篇:返回列表
