1. 函数指针是指针,该指针指向函数。
2. 普通的指针指向变量,函数指针指向函数。
3. 函数本质也是变量。
4. 函数指针可以传入其他函数的参数列表。
5. 我们使用sort函数自定义排序规则的时候经常使用函数指针:如下
#include <iostream>
#include <algorithm>
using namespace std;
//自定义降序排序
bool cmp(int& a, int &b) {
return a > b;
}
int main() {
int arr[5] = { 2, 5, 4, 1, 3 };
//将cmp函数传入sort函数的参数列表
sort(arr, arr + 5, cmp);
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
return 0;
}
6. 下面是一个解释函数指针用法的小案例。
#include <iostream>
using namespace std;
int sum(int a, int b) {
return a + b;
}
int maxv(int a, int b) {
return a > b ? a : b;
}
int minv(int a, int b) {
return a > b ? b : a;
}
void calc(int (*p) (int, int), int a, int b) {
cout << p(a, b) << endl;
}
int main() {
//创建函数指针
int (*p) (int, int);
int a = 10, b = 20;
/*
* 函数指针和普通的指针很相似。
* 函数指针是指向函数的,普通指针是指向变量的。
* 普通指针的创建方式是:int *p;
* 函数指针的创建方式是:int (*p) (int, int);
* 函数指针可以当作参数传入其他函数的参数列表。
*/
p = sum; //p = ∑ 也可以
cout << "sum = " << p(a, b) << endl;
// 将maxv函数作为参数传递到calc函数中
calc(&maxv, a, b);
// 为了美观,也可以省略minv前面的"&"符号
calc(minv, a, b);
system("pause");
return 0;
}
7. 总结:函数就是变量,可以放入其他函数的参数列表。