函数指针数组,我们通常也叫作转移表。
如何创建函数指针数组?
int (*p[3])() = {add};
首先p要和[]先结合,我们拿掉数组名后剩下的就是数组的元素类型
也就是: int (*)() 函数指针
函数指针数组的用途:转移表
1、不适用函数指针数组的转移表
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//方法1
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 a, b;
int input = 1;
int count = 0;
do
{
printf("---------------------\n");
printf("---1、add 2、sub---\n");
printf("---3、mul 4、div---\n");
printf("----- 0、exit -----\n");
printf("---------------------\n");
printf("请选择->:");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出\n");
break;
case 1:
printf("请输入数字:");
scanf("%d %d", &a, &b);
count = add(a, b);
printf("结果为: %d\n",count);
break;
case 2:
printf("请输入数字:");
scanf("%d %d", &a, &b);
count = sub(a, b);
printf("结果为: %d\n", count);
break;
case 3:
printf("请输入数字:");
scanf("%d %d", &a, &b);
count = mul(a, b);
printf("结果为: %d\n", count);
break;
case 4:
printf("请输入数字:");
scanf("%d %d", &a, &b);
count = div(a, b);
printf("结果为: %d\n", count);
break;
default:
printf("选择错误,重新选择\n");
break;
}
} while (input);
return 0;
}
2、使用函数指针数组实现转移表
#include <stdio.h>
int jia(int a, int b)
{
return a + b;
}
int jian(int a, int b)
{
return a - b;
}
int cheng(int a, int b)
{
return a * b;
}
int chu(int a, int b)
{
return a / b;
}2
int main()
{
int x, y,result;
int input = 1;
int (*p[5])(int x, int y) = { 0,jia,jian,cheng,chu };
do
{
printf("---------------------------\n");
printf("----1、加法 2、减法----\n");
printf("----3、乘法 4、除法----\n");
printf("---------------------------\n");
printf("请选择功能:");
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("请输入操作数:");
scanf("%d %d", &x, &y);
result = (*p[input])(x, y);
printf("结果为:%d\n", result);
}
else if(input == 0)
{
printf("退出计算器\n");
}
else
{
printf("输入有误\n");
}
} while (input);
return 0;
}