- 作者:老汪软件技巧
- 发表时间:2023-12-25 11:00
- 浏览量:
一、什么是函数指针数组?
函数指针数组本质是数组,存放的元素是函数指针类型的,即存放函数的地址。
函数指针数组的类型:
如下列代码,指针数组pfArr的类型是 int(*[2])(int, int)
[ ]的优先级比*高,pfArr先与[ ]结合,因此pfArr是数组
int (*) (int,int)是数组存放元素的类型,即函数指针类型
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int main()
{
int* pf1 = &Add;
int* pf2 = ⋐
int(*pfArr[2])(int, int) = { pf1,pf2 };//数组中存放类型相同的元素
return 0;
}
二、函数指针数组实现计算器小程序
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;
}
void Menu()
{
printf("********************\n");
printf("***** 1. 加法 *****\n");
printf("***** 2. 减法 *****\n");
printf("***** 3. 乘法 *****\n");
printf("***** 4. 除法 *****\n");
printf("***** 0. 结束 *****\n");
printf("********************\n");
}
int main()
{
int(*pfArr[])(int, int) = { NULL,Add,Sub,Mul,Div };
int x = 0;
int y = 0;
int input = 0;
do
{
Menu();
printf("请选择:>");
scanf("%d", &input);
if (input == 0)
{
printf("退出程序\n");
}
else if (input >= 1 && input <= 4)
{
printf("请输入两个操作数:>");
scanf("%d %d", &x, &y);
printf("%d\n", pfArr[input](x, y));
}
else
{
printf("非法输入,请重新输入\n");
}
} while (input);
return 0;
}