函数指针 && 返回函数指针的函数的一些姿势

本文介绍了C语言中函数指针的使用,包括调用函数指针的方式以及如何理解函数指针的返回值。通过分析*fp1(int)和void* [10],揭示了函数指针可以指向返回数组指针的函数,并讨论了ANSI C中简写形式的使用规则。
摘要由CSDN通过智能技术生成
函数指针一些知识
(1) ,  在mj下拉刷新中遇到了定义的一个宏,看起来比较晦涩,如下
#define msgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__)
其实就是把objc_msgSend函数指针强制转换成另一种类型((void (*)(void *, SEL, UIView *)))的函数指针,
所以这个宏表示的就是一个个函数指针
(void (*)(void *, SEL, UIView *))这一坨其实表示的是一个函数指针(指向一个函数的指针,这个函数返回值为void,有3个参
数),前面这一坨的意思就是把objc_msgSend这个函数指针转换成这一坨的指针类型。这样的好处就是可以限制这个宏接受的3个参数必须是这一坨中的3个参数。
调用的时候,可以这么调用:
objc_msgSend(ivar1,ivar2,ivar3);
这与(*objc_msgSend)(ivar1,ivar2,ivar3);是等价的。
下面分析为什么他们是等价的?
void (*funcPtr)(); // 这是一个函数指针
void *funcPtr();  //  这是一个函数
主要取决于运算符的优先级, funcPtr是应该先与坐边的*结合还是与右边的()结合, 因为函数运算符() 的优先级要高于单目运算符*,所以如 果没有括号那就先与()结合,那么它就是一个函数。

在《C陷阱与缺陷》中有这样一段描述:

fp是一个函数指针,那么*fp就是该指针所指向的函数,所以(*fp)()就是调用该函数的方式。ANSI C标准允许程序员将上式简写为fp(),但是一定要记住这种写法只是一种简写形式。

在表达式void (*func)()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值