简析令人头大的定义 void (*(*f[])())()
解析
在v2ex闲逛发现有人在谈怎么学习c语言,有人推荐tcpl,然后写了个反人类的变量定义 void (*(*f[])())()
,这么复杂的定义在c++实际的项目中其实也不常见,反正我喜欢研究下到底是什么,就花了点时间去看看这个定义,其实复杂的变量定义在csdn有一个人详细的解读过,不过凭着三脚猫的功底,我还是按着自己的理解去解读下吧。
首先提取下变量名,这个就是我们实际定义的变量f,我们定义了变量f,但是类型还未知,反正知道是
void (*(*[])())()
类型的定义。
然后呢,我们看到了左侧的*和右侧的[],我们知道在没有()的情况下,类型是倾向于和右侧的[]结合的,那么我们知道f是一个数组(当然可以把它弱化为对数组的指针,一样的)。
为了简化理解,我们修改一下这个变量的定义。
void (*(*f[1])())()
这样我们就很简单的知道,f是一个数组,有1个元素,剩下未知的就是数组元素的类型了。
我们来提取下数组的元素类型:
void (*(*)())()
的确是反人类的类型,我们依旧按步骤走。我们朝着刚把变量名移走的位置看,看到了*(*)()
的类型声明,那么究竟这个类型是什么呢?啥都不像!可是最像什么呢?对,有这个类型的,也只有函数指针了。