下面这个例子是函数指针数组的应用场景:
函数指针数组优点:容易扩展。假如在下面的场景中,要进行扩充一个函数(比如求一个数的三次方),只需要新增一个函数,并加入到函数指针数组中。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int squ(int a)
{
return a*a;
}
int main1(void)
{
int i = 0, ret = 0;
int da1 = 0, da2 = 0;
//函数参数不一致,所以不要指定任何形参
int(*funp[5])() = { add, sub, mul, div, squ };
while (1)
{
printf("0. add\n");
printf("1. sub\n");
printf("2. mul\n");
printf("3. div\n");
printf("4. square\n"); //平方
printf("select\n");
scanf("%d", &i);
if (i == 4)
{
printf("input data1\n");
scanf("%d", &da1);
ret = funp[i](da1); //通过函数指针,调用对应函数
}
else
{
printf("input data1, data2\n");
scanf("%d %d", &da1, &da2);
ret = funp[i](da1, da2);
}
printf("ret = %d\n", ret);
}
// 不应用函数指针数组的情况。
#if 0
switch (i)
{
case 0:
ret = add(da1, da2);
break;
case 1:
ret = sub(da1, da2);
break;
case 2:
ret = mul(da1, da2);
break;
case 3:
ret = div(da1, da2);
break;
case 4:
ret = squ(da1);
break;
}
#endif
system("pause");
return 0;
}