回调函数的讲解

回调函数

回调函数就是一个通过函数指针调用的函数。
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用所指向的函数,我们就说这是回调函数。
回调函数不是由该函数的实现方式直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

举一个别人举过的例子:约会结束后你送你女朋友回家,离别时,你肯定会说:“到家了给我发条信息,我很担心你。”对不,然后你女朋友回家以后还真给你发了条信息。小伙子,你有戏了。其实这就是一个回调的过程。你留了个参数函数(要求女朋友给你发条信息)给你女朋友,然后你女朋友回家,回家的动作是主函数。她必须先回到家以后,主函数执行完了,再执行传进去的函数,然后你就收到一条信息了。

举个例子吧:

当我们在在链表中查找一个数时,我们一般会这样写:

 Node *search_list( Node *node, int const value )
 {
      while ( NULL != node ){
         if ( node->value == value ){
              break;
          }
          node = node->link;
      }
 
     return node;
 }

这样就限制我们只能在查找的数必须是int类型,当变为其他类型时我们就无法用这个函数,但是重新写一个函数,他们重复代码又太多。那我们看看用回调函数如何办到。

回调函数查找:

int compare_int( void const *a, void const *b )
 {
    if ( *( int * )a == *( int * )b ){
         return 0;
     }
 
     return 1;
}
  Node *search_list(Node *node, void const *value,  int (*compare)(void const *, void const *))  //函数指针
  {
      while(node != NULL){
          if(compare(&node->value, value) == 0)  //相等
              break;
          node = node->link;
      }
      return node;
 }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值