1.定义
把一个函数的地址存放到数组中,叫做函数指针数组,那么函数指针数组如何定义呢?
a) int (*parr1[3])();
b) int *parr2[3]();
c) int (*)() parr3[3];
答案是:a). parr1 先和[] 结合,说明 parr1是数组,数组的内容是什么呢?
是int (*)() 类型的函数指针。
2 转移表(应用)
#include<stdio.h>
#include<string.h>
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
int xor(int x, int y)
{
return x ^ y;
}
void meau()
{
printf("************************\n");
printf("1:add***************2:sub\n");
printf("3:mul***************4:div\n");
printf("5:xor*******************\n");
printf("0:exit\n");
}
int main()
{
/*int (*pf1)(int, int ) = add;
int (*pf2)(int, int ) = sub;
int (*pf3)(int, int) = mul;
int (*pf4)(int, int) = div;
*/
int (*pfarr[6])(int, int) = { 0,add,sub,mul,div,xor};//转移表
int a, b;
int res;
int input;
do
{
meau();
printf("请选择:");
scanf("%d", &input);
if (input >= 1 && input <= 5) //合法
{
printf("请输入操作数:");
scanf("%d%d", &a, &b);
res = pfarr[input](a, b); //通过地址调用函数
printf("%d\n", res);
}
else if (input == 0)
printf("退出计算器\n");
else
printf("输入有误:\n");
} while (input);
return 0;
}