回调函数。
1、什么是回调函数?
先定义好函数A(喝水过程)的过程,再将这个函数A(喝水过程)作为另外一个函数B(爬山)的参数,然后在函数B(爬)执行过程中回过头来调用函数A(喝水过程),这个函数A就称之为回调函数。
2、回调函数基本框架
#include <stdio.h>
int funB(funA)
{
爬山过程
回过头调用funA这个参数。
}
int funA ()
{
先定义好函数A的实现过程。
喝水的动作
}
int main()
{
funB(funA) ;
}
回调函数核心: 先写好你的功能函数,然后把这个功能函数作为另外一个函数的参数就可以。
==============================================================================
例题:从键盘中获取两个数字,求出两个的值的和。要求使用回调函数来完成。
1)通过分析,求和功能作为回调函数。
int add_fun(int x, int y)
{
return x + y ;
}
2)在main函数中调用函数,把回调函数作为该函数的参数,进行求和。
int main()
{
int a, b,ret;
scanf ("%d %d", &a,&b) ;
ret = my_fun (a, b,add_fun) ;
printf ("ret = %d\n" , ret) ;return 0;
}
3)写函数的实现过程。
my _fun (int x, int y, int (*p)(int ,int))
{
x=a
y=b
p=&add_fun
这就是回调函数的写法
}
问题一:传递了一个函数过来,形式参数应该怎么写?
分析:在C语言中,传递一个函数作为参数,其实就是传递了函数的地址过来,并没有传递了整个函数过来,在形式参数中只需要写一个指针变量来接住这个函数地址就可以。
问题二:接住该函数的指针变量是怎么写?是固定的写法?
不是固定,传递不同的类型函数过来,指针变量的写法是不一样。不像整型变量一样,无论你传递什么整型数据过来,我都是写一个int xo按照以下的步骤进行分析即可。
1)先写一个 *
2)在*后面加上一个变量名字,然后使用一个圆括号将结果括住。(*p)
3)确认你传递的函数是长什么样子的? int add_fun(int x, int y)
4)将第3步的结果的函数名与形式参数的变量名去掉 int add_fun(int x, int y) --> int (int ,int)
5)将第2步的结果写在第4步结果的返回值类型与形式参数列表之间 int (*p) (int ,int)
最终得到的结果:int (*p)(int ,int) -> 函数指针变量