[C語言] function pointer的應用[二]: 傳進相同性質的function到function中

MuLong PuYang
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

延伸閱讀

--

--