简析令人头大的定义 void (*(*f[])())()

简析令人头大的定义 void (*(*f[])())()

解析

在v2ex闲逛发现有人在谈怎么学习c语言,有人推荐tcpl,然后写了个反人类的变量定义 void (*(*f[])())(),这么复杂的定义在c++实际的项目中其实也不常见,反正我喜欢研究下到底是什么,就花了点时间去看看这个定义,其实复杂的变量定义在csdn有一个人详细的解读过,不过凭着三脚猫的功底,我还是按着自己的理解去解读下吧。

首先提取下变量名,这个就是我们实际定义的变量f,我们定义了变量f,但是类型还未知,反正知道是

void (*(*[])())()

类型的定义。

然后呢,我们看到了左侧的*和右侧的[],我们知道在没有()的情况下,类型是倾向于和右侧的[]结合的,那么我们知道f是一个数组(当然可以把它弱化为对数组的指针,一样的)。

为了简化理解,我们修改一下这个变量的定义。

void (*(*f[1])())()

这样我们就很简单的知道,f是一个数组,有1个元素,剩下未知的就是数组元素的类型了。

我们来提取下数组的元素类型:

void (*(*)())()

的确是反人类的类型,我们依旧按步骤走。我们朝着刚把变量名移走的位置看,看到了*(*)()的类型声明,那么究竟这个类型是什么呢?啥都不像!可是最像什么呢?对,有这个类型的,也只有函数指针了。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值