①int (*p1)(int*, int (*f)(int*));
//p1为指针,指向函数,指向函数的第一参数为int*类型,返回值为int;f也为函数指针,指向函数的参数为int*类型,返回值为int
②int (*p2[5])(int*);
//p2为数组,数组包含5个元素,元素为指针,指向函数,函数类型为 int(int*) ==>p2为指针数组
③int (*(*p3)[5])(int*);
//p3为指针,数组指针,指向的数组有5个元素,且这5个元素为指针,是函数指针,指向的函数类型为 int(int*)
④int*(*(*p4)(int*))(int*);
//p4为指针,函数指针,该函数的参数为int*,返回值是指针,是函数指针,且指向的函数类型为 int*(int*)
⑤int (*(*p5)(int*))[5];
//p5为指针,函数指针,该函数的参数为int*,返回值是指针,指向数组,指向的数组类型为int[5]
简化⑤:
typedef int(ArrayType)[5];
typedef ArrayType* (FuncType) (int*);
FuncType *p5;