一 函数指针
1 函数类型
? ? ?函数的类型由它的返回值类型,和形参类型共通过决定,与函数名无关。
? ? ? ? ? ? ?eg:bool lengthcompare(const string&, const string&);
? ? ? ? ? ? ? ? ? 该函数的类型是bool (const string&, const string&)
2 函数指针声明
? ? ?声明一个上述类型的指针pf
? ? ? ? ? ??bool (*pf)(const string&, const string&)
3 使用函数指针
? ? ?(1)把函数名作为一个值使用时,该函数自动转换成指针.
? ? ? ? ??pf =?lengthcompare;
? ? ? ? ??pf = &lengthcompare; ?// 跟上面的语句是等价的,&是可选的
? ? ?(2)调用指针指向的函数
? ? ? ? ? bool b1 = pf("aaa","bbb");
? ? ? ? ? bool b2 = pf("aaa","bbb"); ? ? ? //等价调用
? ? ? ? ? bool b3 =?lengthcompare("aaa","bbb"); ? //另一个等价调用
4 重载的函数指针
? ? ?编译器通过指针类型决定选用哪个函数,指针类型必须与重载函数中的某一个精确匹配
? ? ? ? ? ? void ff(int*);// 第一个函数
? ? ? ? ? ? void ff(unsigned int);// 第二个函数
? ? ? ?
? ? ? ? ? ? void (*pf)(unsigned int) = ff;//pf指向的是第二个函数
5 函数指针的形参
? ? ?函数的形参不能是函数类型,但可以是函数指针类型
? ? ? ? void useBigger(int aa,bool pf?(const string&, const string&)); // 第三个形参会自动转换为指针
? ? ? ? void useBigger(int aa,bool (*pf) (const string&, const string&)); // 等价声明
6 返回指向函数的指针
? ? ? 函数的返回值不能是函数,但可以是函数的指针,返回类型必须显式声明为指针类型
? ? ? ? ?eg:int(*f1(int))(int*,int);
? ? ? ? ? ? ? ? ?函数f1(int )返回类型为int(*)(int*,int)的指针
typedef与using(using是c++11开始支持的用法)
? ? ?typedef int INTT;----> using INTT = int;
? ? ?typedef int* PINTT;----> using PINTT = int*;
? ? ?typedef bool Func(int ,int);----> using?Func?= bool (int,int); // Func是一个函数类型
? ? ?typedef bool (*FuncP)(int ,int);----> using?FuncP?= bool (*)(int,int); // FuncP是一个函数指针类型
?
?
?