什么是回调函数?回调函数的简单实现。

1.概念

        在编写程序的时候,我们通常会在主函数中调用库里的各种函数,这个过程叫做调用,函数在调用的时候通常需要给函数传递一些必要的参数,函数的参数可以是很多的类型,而有的时候系统里的库函数要实现某种功能的时候,需要我们向库函数传递一个函数类型的参数,它才能实现所需达到的功能。这时候的库函数就调用了你编写的函数,这个过程就叫做回调。
        这时被库函数调用的函数,也就是被当做参数传入的函数就被称为回调函数。而这类库函数一样的函数就可以叫做中间函数,他们调用回调函数的过程就叫做登记回调函数。当然回调函数这种机制并不只存在于程序与库函数之间,中间函数也可以是程序员自己编写的函数。
        形象的来讲回调函数就相当于公司给你安排了一项工作(此时这里相当于主函数),但是你发现这项工作你不知从何下手,然后你就在网络上找到了很多的解决方案,你选择了其中一种完成了工作任务。这里的你就是那个中间函数,换句话说就是这些网上找的方案不能完成你的工作,需要你去调用这些方案来完成工作,而你在网络上找的解决方案就是回调函数
        回调函数机制如图:
                                 

2.代码实现


#include <stdio.h>
void Sub(int *p)
{                              //回调函数,对参数减一
	(*p) -= 1;
}

void Add(int *p)
{
	(*p) += 1;                 //回调函数,对参数加一
}

void option_arr(int arr[], int sz,
	void(*op)(int *))          //中间函数,遍历数组,并把他们都放入回调函数的参数
{
	int i = 0;
	for (i = 0; i<sz; i++)
	{
		op(arr + i);
	}
}
int main()
{                              //主函数
	int i = 0;
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	option_arr(arr, sz, Sub);  //调用中间函数,参数中arr为数组,sz为数组大小,Sub选用的回调函数
	for (i = 0; i < sz;i++)
	{
		printf("%d ",arr[i]);
	}
	system("pause");
	return 0;
}
        这里在主函数里给了一个整型数组arr = {1,2,3,4,5,6,7,8,9} ,还调用了中间函数option_arr()。在主函数外定义两个回调函数,一个是Sub(int *p)使数组里的元素减一,一个是Add(int * p)使数组里的元素加一,此外还定义了中间函数option_arr(int arr[],int sz,void(*op)(int *))这里的三个参数第一个是数组,第二个是数组的大小,第三个是一个函数指针,它所指的就是要回调的回调函数,所以中间函数的主要功能是遍历数组里的每个元素,并把他们放入回调函数进行操作。       
        当中间函数里的参数三的回调函数选用Sub时,就对原数组的元素分别减一,结果如图:
                                                              
        当中间函数里的参数三的回调函数选用Add时,就对原数组的元素分别加一,结果如图:
                                                             
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值