【C语言】如何在C语言中使用回调函数

C语言回调函数

回调函数的定义

参考我以前这篇博客:https://blog.csdn.net/weixin_45709330/article/details/104351042

把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。如果代码立即被执行就称为同步回调,如果在之后晚点的某个时间再执行,则称之为异步回调。

函数 F1 调用函数 F2 的时候,函数 F1 通过参数给 函数 F2 传递了另外一个函数 F3 的指针,在函数 F2 执行的过程中,函数F2 调用了函数 F3,这个动作就叫做回调(Callback),而先被当做指针传入、后面又被回调的函数 F3 就是回调函数。

函数名:函数名是指这个函数的地址,函数的首地址,函数名代表函数的入口地址

为什么要使用回调函数?

很多朋友可能会想,为什么不像普通函数调用那样,在回调的地方直接写函数的名字呢?这样不也可以吗?为什么非得用回调函数呢?有这个想法很好,因为在网上看到解析回调函数的很多例子,其实完全可以用普通函数调用来实现的。要回答这个问题,我们先来了解一下回到函数的好处和作用,那就是解耦,对,就是这么简单的答案,就是因为这个特点,普通函数代替不了回调函数。来看看维基百科上面我觉得画得很好的一张图片。
在这里插入图片描述

使用方法

通过通过传入指针来实现。

上代码:
1

int Callback_2(int x) // Callback Function 1
{
	printf("Hello, this is Callback_2 %d",x);
	return 0;
}
int Callback_1() // Callback Function 1
{
	printf("Hello, this is Callback_1");
	return 0;
}
//带参数的回调
int judge(int (*callback)(int))
{
	//调用传入进来的函数
	printf("进入了");
	return callback(1);
}
//不带参数的回调
int judge1(int (*callback)())
{
	//调用传入进来的函数
	printf("进入了");
	return callback();
}
int main()
{
	int i, j, k;
	int min, temp, max;
	int a[N] = { 99,88,66,55,11 };
	
	judge(Callback_1);
	return 0;
}

2

#include<stdio.h>

int Callback_1() // Callback Function 1
{
printf("Hello, this is Callback_1\n");
return 0;
}

int Callback_2() // Callback Function 2
{
printf("Hello, this is Callback_2\n");
return 0;
}

int Callback_3() // Callback Function 3
{
printf("Hello, this is Callback_3\n");
return 0;
}

int Handle(int (*Callback)())
{
printf("Entering Handle Function.\n");
Callback();
printf("Leaving Handle Function.\n");
}

int main()
{
printf("Entering Main Function.\n");
Handle(Callback_1);
Handle(Callback_2);
Handle(Callback_3);
printf("Leaving Main Function.\n");
return 0;
}
运行结果:
Entering Main Function.
Entering Handle Function.
Hello, this is Callback_1
Leaving Handle Function.
Entering Handle Function.
Hello, this is Callback_2
Leaving Handle Function.
Entering Handle Function.
Hello, this is Callback_3
Leaving Handle Function.
Leaving Main Function.

Handle()函数里面的参数是一个指针,在main()函数里调用Handle()函数的时候,给它传入了函数Callback_1()/Callback_2()/Callback_3()的函数名,这时候的函数名就是对应函数的指针,也就是说,回调函数其实就是函数指针的一种用法。

发布了36 篇原创文章 · 获赞 6 · 访问量 2260

猜你喜欢

转载自blog.csdn.net/weixin_45709330/article/details/105266904