函数指针

1.函数类型:

函数类型由它的返回值和参数决定,与函数名无关。

bool lengthCompare(const string&, const string&);
该函数的类型为:
bool (const string&, const string&);
2.函数指针:
要想声明一个可以指向函数的指针,只需将指针替换成函数名即可:

bool(*pf)(const string&, string&);  //未初始化
注意:*pf两端的括号必不可少。如果不写这对括号,则为声明pf是一个返回值为bool指针的函数。

3.函数指针用法:
我们把函数名作为一个值使用时,该函数自动转换成指针。

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;
}

5.返回指向函数的指针

为了方便,一般使用类型别名:

using F = int(int *, int);   //F是函数类型,不是指针
using PF = int(*)(int *, int); //PF是指针类型

PF f1(int);  //正确:PF是指向函数的指针,f1返回指向函数的指针
F f2(int);   //错误:f2不能返回一个函数
F* f3(int);  //正确


6.函数指针和指针函数的区别

指针函数是返回类型是某一指针的函数。






你可能感兴趣的:(函数指针)