1.函数类型:
函数类型由它的返回值和参数决定,与函数名无关。
bool lengthCompare(const string&, const string&);该函数的类型为:
bool (const string&, const string&);2.函数指针:
bool(*pf)(const string&, string&); //未初始化注意:*pf两端的括号必不可少。如果不写这对括号,则为声明pf是一个返回值为bool指针的函数。
pf1 = lengthCompare; //pf1 = &lengthCompare; //这样也可以我们能直接使用指向函数的指针调用该函数:
bool b1 = pf1("hello", "goodbye"); //bool b1 = (*pf1)("hello", "goodbye"); //一个等价调用
4.函数指针形参
int useBigger(const string &a, const string &b, int(*p)(const string &, const string){ return (*p)(a, b); }
#include <iostream> #include <string> using namespace std; int lengthCompare(const string&, const string&); int lengthCompare(const string& a, const string& b){ return a.size()>b.size(); } int useBigger(const string &a, const string &b, int(*p)(const string &, const string&)){ return (*p)(a, b); } int main(){ int(*pf1)(const string&, const string&); //未初始化 pf1 = lengthCompare; //pf1 = &lengthCompare; //这样也可以 bool b1 = pf1("hello", "goodbye"); //bool b1 = (*pf1)("hello", "goodbye"); //一个等价调用 cout << useBigger("hello", "goodbye", pf1) << endl; return 0; }
为了方便,一般使用类型别名:
using F = int(int *, int); //F是函数类型,不是指针 using PF = int(*)(int *, int); //PF是指针类型 PF f1(int); //正确:PF是指向函数的指针,f1返回指向函数的指针 F f2(int); //错误:f2不能返回一个函数 F* f3(int); //正确
指针函数是返回类型是某一指针的函数。