函数指针数组:
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int plus(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a* b;
}
typedef int(*foo_func)(int, int);
typedef int(*bar_func[3])(int, int);
int main()
{
/* 方式一 */
int(*pfunc1[3])(int a, int b) = { add,plus,multiply };
for (int i = 0; i != sizeof(pfunc1)/sizeof(pfunc1[0]); ++i)
{
printf("pfunc1[%d](2, 3): %d\n", i, pfunc1[i](2, 3));
}
/* 方式二 */
foo_func pfunc2[3] = { add,plus,multiply };
for (int i = 0; i != sizeof(pfunc2)/sizeof(foo_func); ++i)
{
printf("pfunc2[%d](2, 3): %d\n", i, pfunc2[i](2, 3));
}
/* 方式三 */
bar_func pfunc3 = { add,plus,multiply };
for (int i = 0; i != sizeof(bar_func)/sizeof(pfunc3[0]); ++i)
{
printf("pfunc3[%d](2, 3): %d\n", i, pfunc3[i](2, 3));
}
return 0;
}
函数指针作为函数参数:
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int plus(int a, int b)
{
return a - b;
}
int calc(int(*pfunc)(int, int), int a, int b)
{
return pfunc(a, b);
}
int main()
{
int res1 = calc(add, 2, 3);
int res2 = calc(plus, 2, 3);
printf("res1: %d\n", res1);
printf("res2: %d\n", res2);
return 0;
}