C语言回调函数的学习

在说明回调函数之前,有必要先说明一下指向函数的指针。一个函数在编译时被分配给一个入口地址,这个函数的入口地址就成为函数的指针。可以用一个指针变量指向该函数,然后通过该指针变量调用此函数。先通过一个例子来了解以下指向函数的指针的用法:

#include <stdio.h>
int max(int x,int y)
{
	int z;
	if(x>y)
		z = x;
	else
		z= y;
	return z;
}
void main()
{
	int max(int,int);
	int (*p)(int,int);   //定义 p是一个指向函数的指针变量 ,p指向的函数有两个int型的参数且返回值也是int型
	int a,b,c;
	p = max;             //将函数max的入口地址赋给指针变量p
	scanf("%d,%d",&a,&b);
	c = (*p)(a,b);       //调用指针变量p指向的函数(这里是max(int,int)函数)
	printf("a=%d,b=%d,max=%d",a,b,c);
}


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

下面是一个回调函数的例子:

/******************************
	本程序通过回调函数实现
	3 + 2 = 5
	3 - 2 = 1
******************************/
#include <stdio.h>
//定义add函数
int add(int a,int b)
{
	return (a+b); 
}
//定义sub函数
int sub(int a,int b)
{
	return (a-b);
}


//定义回调函数
int call_fun(int (*fun)(int,int),int a ,int b)  //这里我的理解就是在传参数
{
	return (*fun)(a,b);
	//return fun(a,b);  //事实证明这样写也能得出正确结果,不知道具体原因
}


int main()
{
	printf("%d,%d\n",call_fun(add,3,2),call_fun(sub,3,2));
}

关于回调函数,依我肤浅的理解就是:回调函数本质还是函数,只是毋庸置疑的,只是将一个函数或者说一个函数的指针(地址)作为参数传递给另外一个函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值