C语言之回调函数(非常重要)附带回调函数版本实现整型的加减乘除四则运算
对于回调函数!想必大家的第一想法,想必就是函数吧!其实这个也是笔者的第一想法,毕竟之前没有见过回调函数,所以就不怎么知道细节!默认为直接调用函数,就是回调函数,但等学会了回调函数,其实就不是这样想了!!
下面请参考一下笔者的在百度百科中的搜索结果:显示回调函数的作用,及其使用方法!原文链接为::回调函数_百度百科回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,有一些需求必须要使用回调函数来实现。最著名的回调函数调用有C/C++标准库stdlib.h/cstdlib中的快速排序函数qsort和二分查找函数bsearch中都会要求的一个与strcmp类似的参数,用于设置数据的比较方法。https://baike.baidu.com/item/%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0/7545973?fr=aladdin下面是笔者简短的引用内容:借此来说明回调函数的重要性!也希望看到此篇博客的读者能够认真欣赏!
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。
回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,
有一些需求必须要使用回调函数来实现。
言归正传:下面请看笔者对于回调函数所下的简单定义:
回调函数就是一个通过函数指针调用的函数!如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这个是回调函数!回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时,由另外的一方调用的,用于对该事件或条件的相应!
其实笔者之前所写的关于计算器方面的博客,就可以改编为:回调函数方法实现计算器
对于原文档的参考代码为:
1.写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算_念君思宁的博客-CSDN博客
2.
上面的两个链接是笔者之前的实现计算器的两种C语言写法!下面笔者将会用回调函数来写一下计算器,实现整型的加减乘除运算!
1. 其实代码段大致还是跟上篇博文内容差不多类似!下面笔者对于相似的部分进行简单的引用,在此,笔者就不再进行过多的讲述(当然,建议有想法的读者去看一下笔者的上篇博客)!
相似部分的代码段为:
//简化一下代码
#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;
}
void menu()
{
printf("***************************\n");
printf("***** 1.add 2. sub ****\n");
printf("***** 3.mul 4. div ****\n");
printf("***** 0.exit ****\n");
printf("***************************\n");
}
上述代码主要还是函数部分,这儿可以实现加减乘除,及菜单的实现!
2. 函数的调用部分(重要环节)参考代码为:精彩环节!!
void cacl(int (*p)(int, int))
{
int x = 0;
int y = 0;
int ret = 0;
printf("请输入2个操作数——》");
scanf_s("%d %d", &x, &y);
ret = p(x, y);
printf("%d\n", ret);
}
上面的这个代码段就用了回调函数,不知道细心的读者能否看清楚!!
在该代码中:ret = p(x, y); 就实现函数的调用:包括:Add,Sub,Mul,Div 这四个函数!对于ret = p(x, y); 也可以改写为:ret = (*p)(x, y); 那个 * 能够省略!
看见上述代码,对于p的调用或许还会有些疑惑,请看笔者的mian函数里面的内容,看了以后,或许您将会有恍然大悟的感觉!
int main()
{
int input = 0;
do
{
menu();
printf("请选择:》");
scanf_s("%d", &input);
switch (input)
{
case 1:
cacl(Add);
break;
case 2:
cacl(Sub);
break;
case 3:
cacl(Mul);
break;
case 4:
cacl(Div);
break;
case 0:
printf("退出计算器!\n");
break;
default :
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
return 0;
}
对于main函数里面的内容,每一次进行输入input,都会在switch语句里面进行判断,决定进入哪一个函数里面,然后在调用该函数,实现对输入两个数字的加减乘除运算!
对于下面函数的调用部分:
cacl(Add);
cacl(Sub);
cacl(Mul);
cacl(Div);
函数名就是函数的地址,既然是地址就要放在指针里面,所以前面使用了:
void cacl(int (*p)(int, int))
ret = p(x, y);
因此总的代码为:
//简化一下代码
#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;
}
void menu()
{
printf("***************************\n");
printf("***** 1.add 2. sub ****\n");
printf("***** 3.mul 4. div ****\n");
printf("***** 0.exit ****\n");
printf("***************************\n");
}
void cacl(int (*p)(int, int))
{
int x = 0;
int y = 0;
int ret = 0;
printf("请输入2个操作数——》");
scanf_s("%d %d", &x, &y);
ret = p(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择:》");
scanf_s("%d", &input);
switch (input)
{
case 1:
cacl(Add);
break;
case 2:
cacl(Sub);
break;
case 3:
cacl(Mul);
break;
case 4:
cacl(Div);
break;
case 0:
printf("退出计算器!\n");
break;
default :
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
return 0;
}
代码的运行结果为:
上面就是笔者索要介绍的回调函数部分!回调函数版本实现整型的加减乘除四则运算
希望读者仔细思考!
- 点赞
- 收藏
- 关注作者
评论(0)