4124人加入学习
(13人评价)
C++编程系列 第二季函数和类

制作于2018.4.2

价格 免费

函数指针

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

函数指针指向的是函数而非对象。

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

bool lengthCompare(const string &,const string &); //函数

bool (*pf)(const string &,const string &); //函数指针

 

函数指针

bool (*pf)(const string &,const string &);

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

注意:*pf两端的括号必不可少,如果省略括号,就变成了一个返回值为bool指针的函数,而不是指向函数的指针

当我们把函数名作为一个值使用时,该函数自动地转换成指针。还可以直接使用指向函数的指针调用该函数

 

#include <iostream>
#include <string>

using namespace std;

bool lengthCompare(const string &s1, const string &s2);
void display(const string &s1, const string&s2, bool(*p)(const string &, const string &));

int main()
{
	string name1 = "Sandy";
	string name2 = "Jane";
	
	//bool res = lengthCompare(name1, name2);

	//定义一个函数指针并给它赋值,pf是指向函数lengthCompare的指针
	bool(*pf)(const string &, const string &);
	pf = lengthCompare;
	/*res = pf(name1, name2);
	if (res == true)
	{
		cout << name1 << "的长度大于" << name2 << endl;
	}
	else
	{
		cout << name1 << "的长度小于" << name2 << endl;
	}*/

	//将pf作为实参传递给函数display
	display(name1, name2, pf);
	return 0;
}

//对比两个字符串的长度
bool lengthCompare(const string &s1, const string &s2)
{
	return size(s1) > size(s2) ? true : false;
}

//将函数指针作为参数传递给另外一个函数,可以直接在这个函数中通过函数指针指向的函数
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;
	}
}

[展开全文]

授课教师

SIKI学院老师

课程特色

下载资料(1)
视频(43)