原來
=========================================================================
#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;
}
=========================================================================
使用 typedef
#include <stdio.h>
typedef int (*calculation)(int, int);
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 operation(int a, int b, calculation calc)
{
return calc(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;
}
這裡我們可以清楚的看到,相較於使用函數指標的方式相告,我們用typedef過後的函數標宣告,不僅整個程式碼看起來更簡潔,整體其實也更為直觀
// use function pointer to declare
int operation(int a, int b, int (*operation)(int, int))
{
return operation(a, b);
}
// use calculation to declare
int operation(int a, int b, calculation calc)
{
return calc(a, b);
}
No comments:
Post a Comment