函数指针数组:首先它是一个数组,这个数组是用来存放函数指针的。
函数指针的定义:int(*p[1024] (int,int);
说明:p先和 [] 结合说明这是一个数组,数组内容是int( *)( )类型的函数指针;
函数指针数组的用途:转移表
例子:支持四则运算的计算器,下面通过两种方法来对比转移表的作用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <math.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 menu()
{
printf("————————————————————————\n");
printf("0、结束程序!\n");
printf("1、add\n");
printf("2、sub\n");
printf("3、mul\n");
printf("4、div\n");
printf("————————————————————————\n");
int choice = 0;
printf("请输入您的选择:");
scanf("%d", &choice);
return choice;
}
int main()
{
int x;
int y;
printf("请输入操作数:");
scanf("%d %d", &x, &y);
int ret;
// 常规方法,虽然能够实现,但是比较麻烦
//while (1)
//{
//
// int choice = menu();
// if (choice == 1)
// {
// ret = Add(x, y);
// }
// else if (choice == 2)
// {
// ret = Sub(x, y);
// }
// else if (choice == 3)
// {
// ret = Mul(x, y);
// }
// else if (choice == 4)
// {
// ret = Div(x, y);
// }
// else if (choice == 0)
// {
// printf("程序结束!\n");
// break;
// }
// else
// {
// printf("输入错误,请重新输入!\n");
// continue;
// }
// printf("你计算的两个数的值为:%d\n", ret);
//}
//
// 方法二:使用转移表
int(*p[5])(int x, int y) = { 0, Add, Sub, Mul, Div }; // 这里就体现了转移表的作用
while (1)
{
int choice = menu();
if (choice <= 4 && choice >= 1)
{
ret = (*p[choice])(x, y);
}
else if (choice == 0)
{
printf("程序结束!");
break;
}
else
{
printf("输入错误,请重新输入\n");
continue;
}
printf("你所求的两个数的值为:%d\n", ret);
}
system("pause");
return 0;
}
程序运行结果:
总结:适当的时候使用转移表可以提高编程效率。