对于返回值类型一致的函数,可以使用函数指针数组将其功能封装,便于调用。
这里重点需要区分函数指针和函数指针数组:
int (*p)(int , int ) = add;
此为函数指针,指针名去掉和函数定义一致,很好理解
int (*p[n])(int , int ) = {add, sub, mul, div}
此为函数指针数组,去掉指针名是个函数指针,加上指针名,指针先与[]结合,是个数组,总体看为函数指针数组!
#include<stdio.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 cal(int input) {
//定义一个 指向数组的 函数指针,将功能封装
printf("请输入两个操作数");
int a = 0;
int b = 0;
scanf_s("%d%d",&a,&b);
int (*p[5])(int, int) = { 0,add,sub,mul,div };
int ret = p[input](a,b);
return ret;
}
void main() {
int input = 0;
do
{
printf("**********************************\n");
printf("***** 1.add 2.sub ************\n");
printf("***** 3.mul 4.div ************\n");
printf("***** 0.exit ************\n");
printf("**********************************\n");
printf("请输入你的选择");
scanf_s("%d", &input);
if (input > 0 && input <= 4)
{
int ret = cal(input);
printf("计算的结果是: %d \n", ret);
}
else if (input == 0)
{
return;
}
else
{
printf("输入的结果有误!\n");
}
} while (input);
}