先放大招: 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吧…