函数指针 一

所谓函数指针,它是一种指针。通过他可以像函数一样调用和传递参数。

函数指针经常和指针函数所混淆,

如:1) int *pf(); 2) int (*pf)();  

1)指的是返回一个int型指针的函数,pf为一个函数名

2)指的是返回一个int型的函数,pf为函数指针。

区别主要在于()的优先级比* 高,所以int *pf() 实际上是 int * (pf());

通常函数指针可以这么申明:

returnType (*pf)(arg1,arg2,...);

pf 为一个指针,指向函数返回类型为 returnTpye,参数为arg1,arg2...的函数。

void (*pr) ();
void func()
{
	...;
}
 pf = func;
 (*pf)();

这样 (*pf)() 就执行了func函数。

那如果我们要定义一个类型和pf一样的函数的指针的时候怎么办呢?

这里我们可以使用一下typedef 这个关键字

	typedef void(*pf)();
	pf pf_new;//这里我们就申明了一个函数指针,类型和pf一样。


那么现在如果我们知道一个函数的地址,假设值为0;这个函数类型和pf所指向的函数类型一样,那么我们如何调用这个函数呢?

我们知道如果申明一个变量通常是 returnType var;

如果我们要申明一个类型和var 一样的变量,那么我们要做的仅仅是把申明中的变量名和申明末尾的分号去掉便可,那么:

void(*)()0// 就将a转换为和pf一样的类型,接下来
(void(*)()0)();//调用地址在0的函数。
当然这里用typedef 会跟简单明了。

函数指针真的很有用啊。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值