【C++】关于函数指针的定义方式

定义函数指针的三种形式

形式1:typedef std::function<返回值(形参类型)> 别名

例:

typedef std::function<void (int ,int)> myfunction1;

这种比较好理解,定义一种返回值为void,形参1为int,形参2为int,这种类型的函数指针,并为这种指针取名为myfunction1;使用的时候也像平时定义普通变量一样去使用就行;

形式2:typedef 返回值类型 (*别名)(形参类型);

例:

typedef void (*myfunction2)(int ,int );

这种也比较好理解,定义一种返回值为void,形参1为int,形参2为int,这种类型的函数指针,并为这种指针取名为myfunction2,但是要记住这是一个指针,使用的时候函数名相当于地址,也就是说需要把函数名赋给它就行了;使用的时候需要解引用。

形式3:返回值类型 (*别名)(形参类型)

例:

void (*myfunction3)(int,int);

这种更是直截了当,但是与前面不同的是,这里是定义了一个函数指针,并非一种,其他方面跟第二种定义的函数指针一样。

使用示例

#include<iostream>
#include<functional>

using namespace std;

typedef std::function<void (int ,int)> myfunction1;//定义一种函数指针
typedef void (*myfunction2)(int ,int );//定义一种函数指针
void (*myfunction3)(int,int);//定义一个函数指针
//从指针层面上理解该函数,即函数的函数名实际上是一个指针,
//该指针指向函数在内存中的首地址

void add (int a ,int b )
{
	cout<<a<<"+"<<b<<"="<<a+b<<endl;
}

int main(){
	myfunction1 fun1;
	myfunction2 fun2;
	fun1 = add;
	fun2 = add;
	myfunction3 = add;
	cout<<"使用第一种形式调用:"<<endl;
	fun1(1,2);
	cout<<"使用第二种形式调用:"<<endl;
	(*fun2)(1,2);
	cout<<"使用第三种形式调用:"<<endl;
	(*myfunction3)(1,2);
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43717839/article/details/131384549