回调函数,顾名思义,将函数作为参数传入,供别的函数调用。
先贴能运行的代码:
#include <iostream>
using namespace std;
typedef int (*callback) (int num);
int callback_1(callback p, int num)
{
return (*p) (num);
}
int x2(int num)
{
return num * 2;
}
int x4(int num)
{
return num * 4;
}
int main()
{
int w;
cout << "原数:"<< 4 << endl;
w = callback_1(x2, 4);
cout <<"x2 = "<< w << endl;
w = callback_1(x4, 4);
cout <<"x4 = "<< w << endl;
}
输出为 :
原数:4
x2 = 8
x4 = 16
首先函数怎么作为参数传入呢?肯定要定义一个形参类型(函数指针)才是,形参类型的定义如下:
typedef int(*callback) (int num);
第一个int,为函数的返回值:int型,第二个(*callback),定义的形参类型名,*代表是指针类型,可以通过解引用定位到真正的函数的地址,然后调用该函数。(int num),代表整个函数的参数类型,需要一个int型的参数,num可省略不写,其实没啥用。
接下来我们要把这个形参类型用起来,定义一个使用这个形参类型的函数:
int callback_1(callback p, int num)
{
return (*p) (num);
}
p是一个函数指针,通过(*p)便可跳转到p函数去运行它,num为参数,不需要输入该参数,可直接内置,比如:
int callback_1( callback p)
{
int num = 4;
return (*p) (num);
}
形参也用起来了,那么接下来需要写一个符合这个形参的函数了,根据形参类型(函数指针)的定义可知,返回值需要是int 型,参数需要一个int型,所以函数定义如下:
int x2(int num)
{
return num * 2;
}
int x4(int num)
{
return num * 4;
}
接下来就是使用函数了,将符合形参的函数放在这个函数里,即可:
int w;
cout << "原数:"<< 4 << endl;
w = callback_1(x2, 4);
cout <<"x2 = "<< w << endl;
w = callback_1(x4, 4);
cout <<"x4 = "<< w << endl;
使用x2就放 x2,使用x4就放x4。