- 首先我们先了解函数指针
// 取最大值函数
int max(int a, int b) {
return a > b ? a : b;
}
// 取最小值函数
int min(int a, int b) {
return a < b ? a : b;
}
void C0618Demo1() {
// 定义函数指针
int (*fn)(int, int);
fn = max;
cout << fn(2, 3) << endl;
fn = min;
cout << fn(2, 3) << endl;
}
运行结果为:
- 现在把函数指针声明移到另一个函数printdata中,作为函数的参数,这样就变成了回调函数,如下:
// 取最大值函数
int max(int a, int b) {
return a > b ? a : b;
}
// 取最小值函数
int min(int a, int b) {
return a < b ? a : b;
}
void printdata(int a, int b, int (*fn)(int, int)) {
int result;
result = fn(a, b);
cout << result << endl;
}
void C0618Demo1() {
printdata(2, 3, max);
printdata(2, 3, min);
}
运行结果如下:
怎么样?这一下子是不是就理解了函数指针与回调函数?其实回调函数就是把函数指针作为另一个函数的指针而已。
- 下面我们再变换一下,用typedef 来定义函数指针,对typedef有更深的理解。
// 取最大值函数
int max(int a, int b) {
return a > b ? a : b;
}
// 取最小值函数
int min(int a, int b) {
return a < b ? a : b;
}
// 用typedef定义
typedef int (*fn)(int, int);
void printdata(int a, int b,fn pfn) {
int result;
result = pfn(a, b);
cout << result << endl;
}
void C0618Demo1() {
printdata(2, 3, max);
printdata(2, 3, min);
}
输出结果还是: