函數是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
#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
#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、匿名函數