- 函数指针:
看这样一个声明:void *(*)(void *)(void*(*act[3])(void *))(void *(*)(void *), void *);
晕了没?用typedef分解下:
原声明等价于:
typedef void *(*Func)(void *);
Func (Func[3])(Func, void *);
即act是一个数组,该数组有3函数指针的成员,每个成员作为函数指针,返回一个void *(*)(void *)型的函数指针,同时每个成员作为函数指针其参数有两个,第一个参数的类型是void *(*)(void *)型的函数指针,第2个参数的类型是void *;
分解诀窍: 先找名字,再右,后左,右看遇到[]是数组,遇到()是函数,左看遇到*是指针,最后再细心让括号配对就行;
注:关于复杂声明, K&C的《The C Programming Language》第5章指针与数组,专门写了个dcl递归下降语法分析程序来分解复杂声明,很是有趣; - 结构体
typedef struct node_t{
node_t *next;
void *data;
} *link;
等价于:
typedef struct node_t *link;
struct node_t{
node_t *next;
void *data;
};