回调函数与普通函数调用分不清楚?3分钟帮你搞定!

在刚开始学习函数调用时,不少初学者弄不清楚“普通函数调用”和“回调函数”之间的区别,下面做一个简单的对比分析。

一句话简单区分
普通函数调用: 函数直接被调用
回调函数:   函数作为参数被调用

这样解释或许还是不够直观,我们直接看例子吧!

普通函数调用

#include <stdio.h>

// 被调用的函数1
int func1(int value)
{
    printf("This is func1,value = %d\n",value);
    return 0;
}


// 被调用的函数2
int func2(int value)
{
    printf("This is func2,value = %d\n",value);
    return 0;
}


// 普通函数调用
int handle_call_back(int value1,int value2)
{
    func1(value1);  // 函数直接被调用
    func2(value2);  // 函数直接被调用
    return 0;
}

int main(void)
{
    int a = 66;
    int b = 88;
    handle_call_back(a,b);
    return 0;
}

执行结果

This is func1,value = 66
This is func2,value = 88

可以看出,这里普通函数的调用,是直接调用函数名func1和func2。

不带参的回调函数

#include <stdio.h>

// 被调用的函数1
int call_back1(void)
{
    printf("This is call_back1\n");
    return 0;
}

// 被调用的函数2
int call_back2(void)
{
    printf("This is call_back2\n");
    return 0;
}

// 回调函数
int handle_call_back(int (*call_back)(void))
{
    call_back();
    return 0;
}

int main(void)
{
    handle_call_back(call_back1); // 函数作为参数被调用
    handle_call_back(call_back2); // 函数作为参数被调用
    return 0;
}

执行结果

This is call_back1
This is call_back2

可以看出,call_back系列函数是作为handle_call_back的参数被调用的。上面是不带参数的回调函数,那带参的回调函数呢?

带参数的回调函数

#include <stdio.h>

// 被调用的函数1
int call_back1(int value1)
{
    printf("This is call_back1,value = %d\n",value1);
    return 0;
}

// 被调用的函数2
int call_back2(int value2)
{
    printf("This is call_back2,value = %d\n",value2);
    return 0;
}

// 回调函数
int handle_call_back(int value,int (*call_back)(int))
{
    call_back(value);
    return 0;
}

int main(void)
{
    int a = 10;
    int b = 20;
    handle_call_back(a,call_back1); // 函数作为参数被调用
    handle_call_back(b,call_back2); // 函数作为参数被调用
    return 0;
}

执行结果

This is call_back1,value = 10
This is call_back2,value = 20

上面的例子可以看出,handle_call_back中的参数value,可以传给int (*call_back)(int),实现了带参回调函数。

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值