文章目录
今天看到了一个符号的声明,给我整懵了。
void (* set_malloc_handler(void (*f) ())) ();
经过一系列分析后,得出结论:set_malloc_handler
是个函数,它的返回值和唯一的形参都是函数指针。
要想知道一个符号到底表示的是指针还是函数,应该按优先级看离它最近的运算符是什么。函数调用()
运算符的优先级高于解引用*
。
比如(*f)
表示f
是个指针,而它的类型声明为void (*)()
,即函数指针,指向的函数的类型为void()
(无返回值,无参数)。
set_malloc_handler(
表示set_malloc_handler
是个函数。函数有一个形参,其类型为void (*)()
,同时函数的返回值也是void (*)()
。
上述声明等同于:
typedef void (*F) ();
F set_malloc_handler(F f)
终于明白typedef
的好处了。