函数指针数组
函数指针数组就是存放函数指针的一个数组,数组里都是函数指针,那么该怎么定义:
int (*parr[10])();
因为 [] 的优先级高于 * ,所以parr先与 [] 结合说明是一个数组,元素类型是 int(*)() 的函数指针。
函数指针数组的用途:转移表
转移表的基础列子:实现计算器
#include<stdio.h>
//函数指针数组创建的简易计算器,又称转移表
void meau()
{
printf("******************\n");
printf("*** 1:add 2:sub***\n");
printf("*** 3:mul 4:div***\n");
printf("*** 0.exlt ***\n");
printf("******************\n");
}
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 main()
{
int input = 0;
int (*parr[])(int, int) = { 0, add, sub, mul, div };//存放函数指针的数组
int x = 0, y = 0, ret = 0;
do
{
meau();
printf("请选择:");
scanf("%d", &input);
if (input == 0)
{
printf("退出计算器\n");
}
else if(input <= 4 && input >= 1)
{
printf("请输入两个数:");
scanf("%d %d", &x, &y);
ret = parr[input](x, y);
printf("ret = %d\n", ret);
}
else
{
printf("输入错误,重新输入\n");
}
} while (input);
}
源代码如上,因为 加减乘除 四个函数的类型相同,所以可以把他们存放到一个数组里,通过数组下标访问函数来调用函数,这样会比普通的计算器代码简便许多,减少了许多代码。
指向函数指针数组的指针
这不是必须学会的,但是理解了可以提升自己。
指向函数指针数组的指针该怎么定义?
int(*parr[5])(int,int);//函数指针数组
int(*(*pfun)[5])(int,int);//指向函数指针数组的指针
剩下的是函数指针数组,pfun与*结合说明是指针。