函数指针数组的介绍及其应用
函数指针数组
函数指针数组的大前提为数组,数组是存放相同类型数据的存储空间
例如:指针数组----存放指针的数组
int *arr[10]; //数组的每个元素都是int*类型
那么,要把一个函数存到一个数组中,这个数组就叫函数指针数组,
int (*parr[10]) ();
parr是一个数组,该数组有10个元素,每个元素都是int(*)()类型,即就是函数指针类型(指向一个无参数、返回值为int的函数的指针)。
函数指针数组的应用 – 转移表
转移表实现简易计算器:
#include <stdio.h>
#include <stdlib.h>
//计算器的实现
int ADD(int a, int b)
{
printf("+");
return a + b;
}
int SUB(int a, int b)
{
printf("-");
return a - b;
}
int MUL(int a, int b)
{
printf("*");
return a * b;
}
int DIV(int a, int b)
{
printf("/");
return a / b;
}
int MOD(int a, int b)
{
printf("%%");
return a % b;
}
void main()
{
system("title 整数计算器"); //控制台的名字
system("mode con cols=40 lines=30"); //控制台的大小
int(*arr[5])(int a, int b) = { ADD,SUB,MUL,DIV,MOD }; //转移表
int input = 1;
while (input)
{
printf("****************************************\n");
printf("*** [1] ADD [2] SUB ***\n");
printf("*** [3] MUL [4] DIV ***\n");
printf("*** [5] MOD [0] OUT ***\n");
printf("****************************************\n");
int a, b;
printf("输入两个操作数:\n >");
scanf_s("%d %d", &a, &b);
printf("\n");
int c;
printf("想要进行的操作:\n >");
scanf_s("%d", &input);
printf("---------------------------------------\n");
if (input > 5 || input < 0)
{
printf("输入有误!!请重新输入!\n");
input = 1;
}
else if (input == 0)
break;
else
{
printf(" %d", a);
int result = (*arr[input - 1])(a, b);
printf("%d = %d\n\n", b, result);
}
system("pause");
system("cls"); //控制台清屏
}
}