码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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.

    编写程序简单实现计算器:加减乘除功能(函数指针数组的写法)_念君思宁的博客-CSDN博客_实现简单计算器加减乘除

     上面的两个链接是笔者之前的实现计算器的两种C语言写法!下面笔者将会用回调函数来写一下计算器,实现整型的加减乘除运算!

    1.  其实代码段大致还是跟上篇博文内容差不多类似!下面笔者对于相似的部分进行简单的引用,在此,笔者就不再进行过多的讲述(当然,建议有想法的读者去看一下笔者的上篇博客)!

    相似部分的代码段为:

    1. //简化一下代码
    2. #include
    3. int Add(int x, int y)
    4. {
    5. return x + y;
    6. }
    7. int Sub(int x, int y)
    8. {
    9. return x - y;
    10. }
    11. int Mul(int x, int y)
    12. {
    13. return x * y;
    14. }
    15. int Div(int x, int y)
    16. {
    17. return x / y;
    18. }
    19. void menu()
    20. {
    21. printf("***************************\n");
    22. printf("***** 1.add 2. sub ****\n");
    23. printf("***** 3.mul 4. div ****\n");
    24. printf("***** 0.exit ****\n");
    25. printf("***************************\n");
    26. }

    上述代码主要还是函数部分,这儿可以实现加减乘除,及菜单的实现!

    2.  函数的调用部分(重要环节)参考代码为:精彩环节!!

    1. void cacl(int (*p)(int, int))
    2. {
    3. int x = 0;
    4. int y = 0;
    5. int ret = 0;
    6. printf("请输入2个操作数——》");
    7. scanf_s("%d %d", &x, &y);
    8. ret = p(x, y);
    9. printf("%d\n", ret);
    10. }

    上面的这个代码段就用了回调函数,不知道细心的读者能否看清楚!!

    在该代码中:ret = p(x, y);  就实现函数的调用:包括:Add,Sub,Mul,Div 这四个函数!对于ret = p(x, y);  也可以改写为:ret = (*p)(x, y);  那个  * 能够省略!

    看见上述代码,对于p的调用或许还会有些疑惑,请看笔者的mian函数里面的内容,看了以后,或许您将会有恍然大悟的感觉!

    1. int main()
    2. {
    3. int input = 0;
    4. do
    5. {
    6. menu();
    7. printf("请选择:》");
    8. scanf_s("%d", &input);
    9. switch (input)
    10. {
    11. case 1:
    12. cacl(Add);
    13. break;
    14. case 2:
    15. cacl(Sub);
    16. break;
    17. case 3:
    18. cacl(Mul);
    19. break;
    20. case 4:
    21. cacl(Div);
    22. break;
    23. case 0:
    24. printf("退出计算器!\n");
    25. break;
    26. default :
    27. printf("选择错误,请重新选择!\n");
    28. break;
    29. }
    30. } while (input);
    31. return 0;
    32. }

    对于main函数里面的内容,每一次进行输入input,都会在switch语句里面进行判断,决定进入哪一个函数里面,然后在调用该函数,实现对输入两个数字的加减乘除运算!

    对于下面函数的调用部分:

    1. cacl(Add);
    2. cacl(Sub);
    3. cacl(Mul);
    4. cacl(Div);

    函数名就是函数的地址,既然是地址就要放在指针里面,所以前面使用了:

    1. void cacl(int (*p)(int, int))
    2. ret = p(x, y);

    因此总的代码为:

    1. //简化一下代码
    2. #include
    3. int Add(int x, int y)
    4. {
    5. return x + y;
    6. }
    7. int Sub(int x, int y)
    8. {
    9. return x - y;
    10. }
    11. int Mul(int x, int y)
    12. {
    13. return x * y;
    14. }
    15. int Div(int x, int y)
    16. {
    17. return x / y;
    18. }
    19. void menu()
    20. {
    21. printf("***************************\n");
    22. printf("***** 1.add 2. sub ****\n");
    23. printf("***** 3.mul 4. div ****\n");
    24. printf("***** 0.exit ****\n");
    25. printf("***************************\n");
    26. }
    27. void cacl(int (*p)(int, int))
    28. {
    29. int x = 0;
    30. int y = 0;
    31. int ret = 0;
    32. printf("请输入2个操作数——》");
    33. scanf_s("%d %d", &x, &y);
    34. ret = p(x, y);
    35. printf("%d\n", ret);
    36. }
    37. int main()
    38. {
    39. int input = 0;
    40. do
    41. {
    42. menu();
    43. printf("请选择:》");
    44. scanf_s("%d", &input);
    45. switch (input)
    46. {
    47. case 1:
    48. cacl(Add);
    49. break;
    50. case 2:
    51. cacl(Sub);
    52. break;
    53. case 3:
    54. cacl(Mul);
    55. break;
    56. case 4:
    57. cacl(Div);
    58. break;
    59. case 0:
    60. printf("退出计算器!\n");
    61. break;
    62. default :
    63. printf("选择错误,请重新选择!\n");
    64. break;
    65. }
    66. } while (input);
    67. return 0;
    68. }

    代码的运行结果为:

    上面就是笔者索要介绍的回调函数部分!回调函数版本实现整型的加减乘除四则运算

    希望读者仔细思考!

  • 相关阅读:
    DAC的简单应用
    Adobe:受益于人工智能,必被人工智能反噬
    Netty(9)粘包与半包问题和解决
    TwinCAT3示波器中添加X轴和Y轴的游标
    [附源码]java毕业设计网上宠物商店
    Kotlin 泛型
    3.6 Protobuf的编译和使用
    想要制作照片书的看这里!
    JVM 别和我说你还不知道这几种垃圾回收器?Serial |Parallel|ParNew|CMS|G1|ZGC
    【毕业设计-课程设计】-单片机电子密码锁设计
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/126803207
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号