函数指针的使用

函数指针通常用来将一个函数A作为参数传递到另一个函数B当中,我们可以通过函数指针在函数B中对函数A进行使用。


举个栗子:

我们定义一个函数 int TaskAssignment(...) 用于创建一个线程,多次调用该函数即可创建多个线程。我每次希望创建的线程所要实现的功能是不同的,但回调函数所接受的参数却是相同的,即利用 phtread_create(...) 函数创建线程时传入的回调函数不同但回调函数的参数相同,但是受限于某些原因我们还不能简单的多次调用 pthread_create(...) 函数来实现这个效果,于是我们就要将回调函数作为参数传入到 TaskAssignment(...) 函数中。

这种情况下我们可以利用 typedef 定义一个函数指针类型,类似这样:

 typedef void (*pfModBlock)(char *addr, int len)


在定义完函数指针类型之后,使用语句 pfModBlock pfa; 这样的语句即可声明一个指向返回值为空、参数为 char* 和 int 类型的函数的函数指针 pfa。

利用语句 pfa = WriteData(char*, int, char* ); 将 pfa指向函数 WriteData(...) 之后,就可以通过将函数指针 pfa 传递进 TaskAssignment(...) 函数的方式将函数 WriteData(...) 传递进去。

传递方式类似于这样: 

TaskAssignment(pfa, pWords, length, data, ...);


在 TaskAssignment(...) 函数体中,我们可以按照类似于下面这样的方式调用 pfa 所指向的函数:


int TaskAssignment(pfModBlock a, char *b, int c, char *d, ...){

(*a)(b, c, d);

...

}


其中的 (*a)(b, c, d); 这一句的含义就相当于 WriteData(b, c, d);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值