回调函数(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>


 

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

posted @ 2015-08-31 16:04  普雅花郎  阅读(416)  评论(0编辑  收藏  举报