函数指针
函数的地址是存储其机器语言代码的内存的开始地址.
可以编写一个将另一个函数的地址作为参数的函数. 这样第一个函数将能够找到第二个函数, 并运行它. 与直接调用相比, 这种方法很笨拙, 但它允许在不同的时间传递不同函数的地址, 这意味着可以在不同的时间使用不同的函数.
1.函数指针的基础知识
1.1 获取函数的地址
只要使用函数名即可获得函数地址. 也就是说, 如果think()是一个函数, 那么think就是它的地址.
1.2 声明函数指针
通常, 要声明指向特定类型的函数的指针, 可以首先编写这种函数的原型, 然后用(*pf)替换函数名, 这样pf就是这类函数的指针.
double pam(int);
//指针类型声明
double (*pf)(int);
为提供正确的运算符优先级, 必须在声明中使用括号将*pf括起.
*pf(int)意味着pf()是一个返回指针的函数, 而( *pf)(int)意味着pf是一个指向函数的指针.
1.3 使用函数指针来调用函数
double pam(int);
double (*pf)(int);
pf = pam;
double x = pam(4);
double y = (*pf)(5);
//C++也允许像使用函数名那样使用pf
double y = pf(5);
2.使用函数指针的例子(回调函数)
首先, 我们了解下回调函数的概念:回调函数就是一个被作为参数传递的函数。
这个例子定义了两个返回类型为bool型的函数, 在函数compareNumberFunction中, 最后一个参数为函数指针, 当需要找出比被比较数字大的数的时候, 实参为compareGreater的地址, 反之, 实参为compareLess的地址.
函数回调本质为函数指针作为函数参数,函数调用时传入函数地址,这使我们的代码变得更加灵活,可复用性更强。