zoukankan      html  css  js  c++  java
  • 回调函数(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("你是大傻逼!!!
    ");
          } 
      }         
      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
    ",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>


     

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

  • 相关阅读:
    StratifiedKFold实现分层抽样
    Windows 平台下 pip 下载whl第三方库
    Adversarial Training Methods For Semi-Supervised Text Classification 虚拟对抗训练思路指引
    MNIST 数据加载
    delphi:raise 语句: 抛出异常 (转载)
    delphi:创建对象时,Application、Self、nil三者的区别(转载)
    delphi:nil、null、UnAssigned区别(转载)
    delphi:TMS安装(转载)
    delphi: MSComm的属性
    delphi:第三方控件的安装与删除(转载)
  • 原文地址:https://www.cnblogs.com/TGSB/p/4824244.html
Copyright © 2011-2022 走看看