先放大招: cdecl: C gibberish ↔ English
简单地说有如下5条规则:
[N]
or[]
拥有N个或不确定个数元素的数组, 元素类型为…(type_a, type_b)
接受type_a, type_b, …参数的函数, 返回类型为…*
指针, 指向类型为…- 优先级
[]
>*
,()
>*
- 括号永远优先
看个蜜汁的例子: int *(*p[])(int)
先从最内层看起:
[]
优先级较高,p[]
: p是一个数组, 元素的类型为…*p[]
: 元素的类型为指针, 指向类型为…()
优先级较高,(*p[])(int)
: 指向类型为一个接受int的函数, 返回类型为…*(*p[])(int)
: 返回类型为一个指针, 指向类型为…int *(*p[])(int)
: 指向类型为int
结论:
p是一个数组, 元素的类型为指针, 指向类型为一个接受int的函数, 返回类型为一个指针, 指向类型为int
这里有一篇更为详细的解释, 介绍了顺时针法, 给出了很多例子, 可以参考一下: Clockwise/Spiral Rule
不过遇到这么麻复杂的类型还是多用typedef
吧…