C语言的类型声明可以很简单,如仅仅声明一个int变量、指向int的指针、int数组等。也可以将这些简单类型组合起来构成很复杂的类型。
要分析这些复杂声明,关键是记住优先级:
示例:
int (*ary[5])();
根据优先级,ary是一个有5个元素的数组,每个元素是一个函数指针,该函数的返回值类型是int。
对于更复杂的类型,最好用typedef来简化定义。
例如:
int *(*(*(*x)())[10])();
我们先从里向外进行分析:
综上,x是一个函数指针,该函数的返回值类型是一个指向10个元素数组的指针,每个数组元素又是一个函数指针,对应函数的返回值类型是int指针。
虽然总能分析出来,但合理使用typedef,结果会清晰很多:
typedef int *(*print_function_ptr)(); typedef print_function_ptr (*digit_routines)[10]; digit_routines (*x)();