[C語言] function pointer的應用[二]: 傳進相同性質的function到function中
5 min readJan 19, 2019
Function pointer的另一個妙用就是我們可以傳相同性質的function到function中,這樣就可以大幅的提高整體程式的可讀性以及應用性。
實作加減乘除的函數
今天我們實踐加減乘除的功能,我們需要呼叫四個不同的函數,來達成這樣的功能。
#include <stdio.h>int add(int a, int b)
{
return a + b;
}int minus(int a, int b)
{
return a - b;
}int multiply(int a, int b)
{
return a * b;
}int divide(int a, int b)
{
return a / b;
}int main(int argc, char* argv[])
{
int val;
// add
val = add(4, 2);
printf("val = %d\n", val);
// minus
val = minus(4, 2);
printf("val = %d\n", val);
// multiply
val = multiply(4, 2);
printf("val = %d\n", val);
// divide
val = divide(4, 2);
printf("val = %d\n", val);
return 0;
}
執行結果
val = 6
val = 2
val = 8
val = 2
使用function pointer的方法,來達成一個函數加減乘除的功能
在上個示例中,我們為了要執行加減乘除了功能,所以我們呼叫了四個不同的函數add, minus, multiply, divide。但是我們其實可以使用function pointer的方法,把這四個函數傳進來同一個function中,使用這單一個function來達成加減乘除了方法。
首先,我們可以發覺,其實這四個函數其實擁有相同的格式,回傳值皆是int型態,而接收的兩個參數,皆是int型態
int add(int a, int b);
int minus(int a, int b);
int multiply(int a, int b);
int divide(int a, int b);
這樣子,我們可以宣告一個一個擁有函數指標參數的函數,來接收這四個不同功能的函數
int operation(int a, int b, int (*operation)(int, int))
{
return operation(a, b);
}
如此我們就可以使用這個函數,來達成加減乘除了功能,如此就可以使用一個函數來達成加減乘除了功能,這樣不僅大幅度的加強了程式的簡潔度,也會使整體程式的可讀性大為增加。
operation(4, 2, add);
operation(4, 2, minus);
operation(4, 2, multiply);
operation(4, 2, divide);
以下是完整的範例程式碼
#include <stdio.h>int add(int a, int b)
{
return a + b;
}int minus(int a, int b)
{
return a - b;
}int multiply(int a, int b)
{
return a * b;
}int divide(int a, int b)
{
return a / b;
}int operation(int a, int b, int (*operation)(int, int))
{
return operation(a, b);
}int main(int argc, char* argv[])
{
int val;
// add
// val = add(4, 2);
val = operation(4, 2, add);
printf("val = %d\n", val);
// minus
// val = minus(4, 2);
val = operation(4, 2, minus);
printf("val = %d\n", val);
// multiply
// val = multiply(4, 2);
val = operation(4, 2, multiply);
printf("val = %d\n", val);
// divide
// val = divide(4, 2);
val = operation(4, 2, divide);
printf("val = %d\n", val);return 0;
}
執行結果
val = 6
val = 2
val = 8
val = 2