回调函数(C语言)

         回调函数这个概念在网上的资料非常的多,一搜一大把,写的比较好的有:

      回调函数—每天进步一点点

      回调函数(百度百科)

      经过学习之后,我对回调函数有了粗浅的认识,归纳总结如下:

 一、什么是回调函数

      void func1(int a,int b);

      void func2(int,void(*func1)(int,int));

      那么,func2就是回调函数。

      通过上面的定义就应该可以初步的了解到回调函数的定义了,参数中通过函数指针调用了别的函数的函数叫回调函数。func2的参数中有一个函数指针func1,而这个指针指向了另外一个函数func1(int,int)。

      (以上是一个非常简单粗糙的定义,仅是为了初步的理解。)

二、为什么要用回调函数?

      假设void func1(int,int)函数实现的功能就是为了排序,而func2实现的功能中恰好想应用到排序这个功能。比如想将一串数组排序后再取出最小的一个数。如果使用回调的话,func2就可以直接调用func1了,用func1实现排序而不用管到底func1是用怎样的方法实现的排序。

      想要真正的理解一个概念,在项目中直接遇到话会有更深的理解。而我还没有遇到,所以理解就只能在这一层了。

 三、代码简单实现:

      比如说有个人惹了你,你想给他发一个“你是大傻逼”。想实现一个函数,并且想发几次发几次。

     

  #include<stdio.h>
  #include<stdlib.h>
   
  void function(int);//该函数实现慰问信息的具体实现
  void send(int a,void(*func)(int));//发a次慰问信息
  
  int main(void)
  {
      send(5,function);
  
      return 0;
  } 
  void function(int a)
  {       
      int i=0;
      for(i=0;i<a;i++)
      {   
          printf("你是大傻逼!!!\n");
      } 
  }         
  void send(int a,void(*func)(int))
  {
      func(a);
  }


        以上就是一个非常简单的回调函数的实现。

        为了加深理解,可以去看一下C语言中的标准库函数:快速排序、二元搜索等的应用。里面有涉及回调函数的知识。

<span style="font-size:18px;">   #include<stdio.h>
   #include<stdlib.h>
   
   int sort_function(const void* a,const void* b);
   int list[5]={54,21,11,67,22};
   
   int main(void)
   {
       int x;
       qsort((void*)list,5,sizeof(list[0]),sort_function);
       for(x=0;x<5;x++)
       { 
          printf("%i\n",list[x]);
       }   
          
       return 0; 
   }       
   int sort_function(const void* a,const void* b)
   { 
      int* aa=(int *)a,*bb=(int*)b;
      if(*aa>*bb) 
      {
          return 1;
      }
      if(*aa==*bb) 
      {
          return 0;
      } 
      if(*aa<*bb) 
      { 
          return -1;
      }
   }

</span>


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/TGSB/p/4824244.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在企业级的C语言开发中,回调函数是一种常见的编程技术,用于实现事件驱动的程序设计。回调函数是指在某个特定事件发生时,由系统或其他模块调用的函数。 回调函数通常用于以下场景: 1. 事件处理:当某个事件发生时,系统会调用预先注册的回调函数来处理该事件。例如,当用户点击按钮时,系统会调用相应的回调函数来执行按钮点击事件的处理逻辑。 2. 异步操作:在进行异步操作时,可以通过回调函数来处理操作完成后的结果。例如,在网络请求完成后,系统会调用相应的回调函数来处理返回的数据。 3. 插件扩展:在插件化架构中,可以通过回调函数来扩展主程序的功能。插件可以注册自己的回调函数,主程序在适当的时机调用这些回调函数来执行插件的功能。 在C语言中,实现回调函数的一种常见方式是使用函数指针。具体步骤如下: 1. 定义回调函数类型:使用typedef关键字定义一个函数指针类型,该类型表示回调函数的签名(参数列表和返回值类型)。 2. 注册回调函数:将回调函数的地址赋值给一个函数指针变量,将该变量传递给需要注册回调函数的模块。 3. 触发事件:当事件发生时,调用函数指针变量即可执行注册的回调函数。 下面是一个简单的示例代码,演示了如何使用回调函数: ```c #include <stdio.h> // 定义回调函数类型 typedef void (*CallbackFunc)(int); // 注册回调函数 void registerCallback(CallbackFunc callback) { // 模拟事件发生 int event = 10; // 触发事件,调用回调函数 callback(event); } // 回调函数实现 void callbackFunction(int event) { printf("Event %d occurred!\n", event); } int main() { // 注册回调函数 registerCallback(callbackFunction); return 0; } ``` 以上代码中,定义了一个回调函数类型`CallbackFunc`,并在`registerCallback`函数中接受一个回调函数作为参数。在`main`函数中,通过调用`registerCallback`函数并传递`callbackFunction`作为参数,实现了回调函数的注册和触发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值