//指针名为pf,指向一个返回值为bool,参数为两个const string&的函数bool (*pf)(const string&, const string&);//这个不是函数指针,而是一个返回值为bool*的pf函数bool *pf(const string&, const string&);
bool lengthCompare(const string&, const string&);bool (*pf)(const string&, const string&);int main(){pf = lengthCompare; //正确pf = &lengthCompare;//正确return 0;}
调用方式
bool lengthCompare(const string&, const string&);bool (*pf)(const string&, const string&);int main(){pf = lengthCompare; bool b1 = (*pf)("hello", "goodbye");//相当于在调用lengthCompare("hello","goodbye")bool b2 = pf("hello","goodbye"); //同上,但是注意这是简写形式return 0;}
void ff(int*);void ff(unsigned int);void (*pf)(int*)=ff; //正确,指向void ff(int*);void (*pf2)(int)=ff; //错误,没有匹配的函数double (*pf3)(unsigned in)=ff; //错误,没有匹配的函数
bool lengthCompare(const string&, const string&);void useBigger(const string&, const string&, bool pf(const string&, const string&));void useBigger2(const string&, const string&, bool (*pf)(const string&, const string&));int main(){bool (*pf)(const string&, const string&);pf = lengthCompare; useBigger("hello", "goodbye",lengthCompare);useBigger("hello", "goodbye", pf);useBigger2("hello", "goodbye", lengthCompare);useBigger2("hello", "goodbye", pf);return 0;}
bool lengthCompare(const string&, const string&);
//Func和Func2都是函数类型
typedef bool Func(const string&, const string&);
typedef decltype(lengthCompare) Func2;
//FuncP和FuncP2都是函数指针类型
typedef bool(*FuncP)(const string&, const string&);
typedef decltype(lengthCompare) *FuncP2;
void useBigger(const string&, const string&, Func);
void useBigger2(const string&, const string&, FuncP);
int main()
{
bool (*pf)(const string&, const string&);
pf = lengthCompare;
useBigger("hello", "goodbye",lengthCompare);
useBigger("hello", "goodbye", pf);
useBigger2("hello", "goodbye", lengthCompare);
useBigger2("hello", "goodbye", pf);
return 0;
}
int (*f1(int))(int*, int);
using F = int(int*, int); //F为函数类型using PF = int(*)(int*, int);//PF为函数指针类型PF f1(int); //f1函数返回一个函数指针,该指针指向的函数返回值为int,参数为int*和intF* f1(int); //同上F f1(int); //错误,F为函数类型,不能直接返回
auto f1(int)->int(*)(int*, int);
string::size_type sumLength(const string&, const string&);string::size_type largerLength(const string&, const string&);decltype(sumLength) *getFcn();