函数指针与回调函数是c语言里面非常重要的概念。我这个星期研究了好久。
1.函数指针
首先我们要知道函数是怎么定义的,例如:
int change(int , int)
指针我相信你们也学过,所以这里就不说了。那函数指针应该怎么去定义呢。以上面函数定义为例
返回值类型和形参类型一定要一致
这样子:
int (*ch1) (int,int);//这里的ch1就是一个名字,你想替换原来change的名字就可以去修改
然后呢,我们要声明它是等于原来函数名的这样子
int (*ch1)(int,int) = change;//这样子去声明
这样子去用
#include <stdio.h>
int change(int a,int b)
{
if(a>b)
{
return a;
}
else
return b;
}
int main()
{
int a=3;
int b= 2;
int (*ch1)(int,int)=change;
int res = ch1(a,b);
}
2.回调函数
现在我们要知道什么是回调函数,回调函数就是一个叫回调函数的函数。haha,just kidding.
回调函数就是允许你讲一个函数作为参数传给另一个函数
- 调用者(Caller):调用另一个函数,并将回调函数作为参数传递给它的函数。
- 被调用者(Callee):接收回调函数作为参数,并在适当的时候(如完成某项任务后)调用该回调函数的函数。
- 具体还是要看代码是怎么实现的:
- 先上代码
#include <stdio.h> int add(int a,int b) { return a+b; } void print(int (*callback)(int,int),int num) { int a = callback(num,10); int i; for(i=0;i<a;i++) { } printf("a = %d\n",a); } int main(int argc, char const *argv[]) { int (*another)(int,int)=add; int a = 2; int b = 3; int res = another(a,b); printf("res = %d\n",res); print(another,res); return 0; }
也就是说如上面代码,void print()里面调用,不对,就是说先去函数指针一下
-
void print(int (* callback)(int,int),int num);
代码还是要自己手敲,不然根本记不住,然后要在主函数里面要声明一下
int (*ch1)(int,int) = change;//这样子去声明
就类似于这样子,然后主函数调用print就可以去传参了
就像这样子
print(another,res);
another就是刚才在主函数里面声明的函数指针,可以直接传进去,在print()函数里面去使用
比如这样子
int a = callback(num,10);
定义一个a去接收在add()这个函数里面返回的值,然后再进行下一步操作。