1. 指针
int *p1[10]; // p1 是一个数组, 含有 10 个指针的数组
int (*p2)[10] = &arr; // p2 是一个指针, 指向含有 10 个整数的数组
bool *pf(const string & , const string &); // pf 是一个函数,该函数返回为bool指针的函数,即返回bool *
bool (*pf) (const string & , const string &); // pf 是一个指针, 指向函数的指针
2. 使用函数指针
我们把函数名作为一个值使用时,该函数自动转换为指针
bool lengthCompare(const string &, const string &) {
}
// pf 指向一个函数,该函数的参数是两个 const string 的引用,返回值为 bool 类型
bool (*pf) (const string &, const string &);
int main() {
// 函数名作为一个值使用时,该函数自动转换成指针
pf = lengthCompare; // 等价于 pf = &lengthCompare;
return 0;
}
接下来是花式运用
#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool lengthCompare(const string &, const string &) {
}
// pf 指向一个函数,该函数的参数是两个 const string 的引用,返回值为 bool 类型
bool (*pf) (const string &, const string &);
int main() {
// 函数名作为一个值使用时,该函数自动转换成指针
pf = lengthCompare; // 等价于 pf = &lengthCompare;
// 下面为3种等价调用
bool b1 = pf("hello", "hi");
bool b2 = (*pf)("hello", "hi");
bool b3 = lengthCompare("hello", "hi");
return 0;
}
3. 函数指针形参
形参看起来像函数类型,实际上确是当成指针使用
void useBigger1(const string &s1, const string &s2, bool pf(const string &, const string &));
void useBigger2(const string &s1, const string &s2, bool (*pf)(const string &, const string &));