C++的函数指针

这篇文章是我看Siki学院学习的笔记,学习的地址如下:

http://www.sikiedu.com/my/course/518

因本人才疏学浅,如有错误之处,还请见谅

定义

与数据项;类似,函数也有地址,函数的地址是存储其机器语言代码内存的开始地址.可以将地址作为函数的参数,从而使第一个函数能够找到第二个函数,并运行它.

函数指针指向的是函数而不是对象

想要声明一个可以指向的是函数而非对象

想要声明一个可以指向函数的指针,只需要用指针替换函数名即可

下面是一个例子

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(void){
	bool lengthCompare(const string &,const string &);	//函数
	bool (*pf)(const string &,const string&);	//函数指针
	return 0;
}

pf是一个指向函数的指针,其中该函数的参数是两个const string的引用,返回值是布尔类型

注意:

*pf的两端的括号必不可少,如果省略括号,就变成了一个返回值为bool指针的函数,而不是指针函数的指针.
当我们把函数名作为一个值使用时,该函数自动的转换成指针,还可以直接使用指向函数的指针调用该函数
#include<iostream>
#include<string>
#include<vector>
#include <iterator>
using namespace std;
bool lengthCompare(const string &,const string &);	//普通的函数
void display(const string &s1,const string &s2,bool(*p)(const string &,const string &));
int main(void){
	string name1="Sandy";
	string name2="Jane";
	bool res=lengthCompare(name1,name2);		

	bool (*pf)(const string&,const string&);	//函数指针
	pf = lengthCompare;							//让函数指针,指向函数

	display(name1,name2,pf);
	return 0;
}
bool lengthCompare(const string &s1,const string &s2){
	return s1.size()>s2.size();
}
//让这个函数指针,当成一个参数传递给另外一个函数
void display(const string &s1,const string &s2,bool(*p)(const string &,const string &)){
	if(p(s1,s2)==true){
		cout<<s1<<"的长度大于"<<s2<<endl;
	}
	else{
		cout<<s1<<"的长度小于"<<s2<<endl;	
	}
}
posted @ 2020-06-24 15:39  黄鹏宇  阅读(150)  评论(0)    收藏  举报