携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情
函数指针数组
数组是一个存放相同类型数据的存储空间,那我们已经学习了指针数组 比如:
int* arr[10]; //整型指针数组
那要把函数的地址存到一个数组中,那这个数组就叫函数指针数组,那函数指针的数组如何定义呢?
int (*parr1[10]])(); //
int *parr2[10]();
int (*)() parr3[10];
答案是:
parr1·parr1· 先和[]结合,说明parr1是数组,数组的内容是什么呢? 是int (*)()类型的函数指针。
函数指针数组的用途: 转移表 例子:(计算器)
#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 main()
{
int (*pf[4])(int, int) = { add,sub,mul,div };
int sz = sizeof(pf) / sizeof(pf[1]);
int i = 0;
for (i = 0; i < 4; i++)
{
//实现5和3的加减乘除
printf("%d\n", pf[i](5,3));
}
return 0;
}
//计算器优化
#include <stdio.h>
void menu()
{
printf("*************************\n");
printf(" 1:add 2:sub \n");
printf(" 3:mul 4:div \n");
printf("*************************\n");
printf("请选择:");
}
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;
}
void Calc(int (*pf)(int ,int))
{
int x, y;
printf("请输入两个操作数\n");
scanf("%d%d", &x, &y);
printf("%d\n", pf(x, y));
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
do
{
menu();//菜单
scanf("%d", &input);
switch (input)
{
case 1: Calc(add);
break;
case 2: Calc(sub);
break;
case 3:Calc(mul);
break;
case 4:Calc(div);
break;
case 0: printf("退出\n");
break;
default: printf("输出有误,请重新输入\n");
break;
}
} while (input);
return 0;
}