前言
标题所示的是什么意思?
写成下面的形式就容易看了:
typedef void (* p_f)();
static p_f set_malloc_handler(p_f f);
下面尝试进行解释
添加一些空格,方便阅读
static void( *set_malloc_handler( void(*f)() ) ) ();
下面对一些概念进行说明:
- 返回指针的函数(这个指针指向一个函数)。首先有一个函数,函数名为set_malloc_handler,这个函数的形参列表为空,这个函数返回一个指针,这个指针指向一个函数(该函数形参列表为空返回类型为void):
void (*set_malloc_handler() ) () - 函数的形参列表为指向函数的指针
void set_malloc_handler( void(*f)() ) - 1和2结合,即它是一个函数,形参列表为一个指针(该指针指向一个函数),返回值也是一个指针(该指针也指向一个函数):
static void( *set_malloc_handler( void(*f)() ) ) ();
如何看?
首先从左向右找到名称,找到名称后从右向左看,括号优先级较高,同级别运算顺序为从左向右。首先找到set_malloc_handler,由于*的优先级低于()所以set_malloc_handler和括号结合,set_malloc_handler( void(*f)() )为函数名和其形参列表,剩下的则为其返回值,void(*)(),他的形参为 void(*f)()。
总结
更详细的讨论: