C语言——回调函数来二次优化计算器
上一节我们通过了转移表来优化计算机。这一次我们来使用函数指针最主要的用处,用回调函数来二次优化我们的计算器代码。
首先我们还是通过代码去了解什么是回调i函数,回调函数的运行是什么样的
其实回调函数就是把函数Add的地址通过main函数传给函数test,函数test将这个地址命名为形参pf,再通过pf调用Add函数。文字表达的很绕就像它的名字一样“回调函数”,但跟着图片箭头多捋几次其实也不难。
那现在我们就用回调函数来优化一下我们的整段代码把
//打印菜单函数
void meun()
{
printf("**************\n");
printf("**** 1.加 ****\n");
printf("**** 2.减 ****\n");
printf("**** 3.乘 ****\n");
printf("**** 4.除 ****\n");
printf("****0.退出****\n");
printf("**************\n");
}
//加法函数
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;
}
//回调函数
void Calculate(int(*pf)(int, int))
{
int result = 0;
int x = 0;
int y = 0;
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
result = pf(x, y);
printf("%d\n", result);
}
int main()
{
int input = 0;
do {
meun();//打印菜单
printf("请输入您的选项:");
scanf("%d", &input);
switch (input)
{
case 1:
Calculate(Add);
break;
case 2:
Calculate(Sub);
break;
case 3:
Calculate(Mul);
break;
case 4:
Calculate(Div);
break;
case 0:
printf("退出计算器\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
这时候我们就能发现,Calculate函数就像是一个控制台一样通过调用函数处理四种功能。回调函数正是利用了函数具有地址,我们可以通过函数的地址进行传参。回调函数的好处就是让代码拥有了通用这个属性。
还没完全掌握回调函数也没关系,我们会在qsort再次讲解回调函数。