一种使用函数指针注册函数的方法

一种使用函数指针注册函数的方法

今天看别人的代码,发现一种使用函数指针注册函数的方法,值得与大家分享一下。

什么是函数指针

函数指针也是一种指针,只不过这种指针较为特殊,指向一个函数。

例如我们现在有一个求和的函数:

//求和函数
int sum(int a,int b)
{
	return a+b;
}

声明一个函数指针

// 方式1
int (*fun)(int a, int b);
// 方式2
int (*fun)(int, int);

给函数指针赋值

// 方式1
fun = sum;
// 方式2
fun = ∑

调用函数指针

int c;
// 方式1
c = fun(1,2);
// 方式2
c = (*fun)(1,2);

函数指针还可以与关键字fypedef结合使用,案例如下

#include <iostream>
using namespace std;
//用T 表示 int (*)(int, int) 类型
typedef int (*T)(int, int);
//求和函数
int sum(int a, int b)
{
	return a + b;
}

int main()
{
	T t = sum;
	cout << t(1, 2);
	return 0;
}

使用函数指针注册函数

在嵌入式编程中,我们往往用一个函数名调用函数,但函数的实现则使用了另一个函数名。
下面这个例子是一个简单的使用函数指针注册函数的方式:

#include <iostream>
using namespace std;

//两种都可
//int (*phandle)(int a, int b);
int (*phandle)(int, int);

//注册函数
void sign(void* buf)
{
	phandle = (int (*)(int, int))buf;
}

//求和
int sum(int a, int b)
{
	return a + b;
}
//求积
int sb(int a, int b)
{
	return a * b;
}

int main()
{
	//注册
	sign(sum);

	//调用
	//注意,此处需要检查phandle是否已经注册,防止bug
	if(phandle)
	{
		cout << phandle(2, 3) << endl;
	}

	//注册
	sign(sb);

	//调用
	if(phandle)
	{
		cout << phandle(2, 3) << endl;
	}

	//比如phandle是中断服务函数
	//我们可以用这种方式,来选择我们要执行的中断

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值