在执行函数指针的typedef时是*必需的?

Mar*_*ers 3 c c++ typedef function-pointers function

当我写了一段"无意识的"代码时,我开始回答这个问题,并成功编译并得到了理想的行为.后来我注意到了变化的奇怪之处,并意识到我使用了完成相反的顺序来执行函数指针的typedef.如果"无意识"的错误实际上在语法上是正确的,我现在感到困惑.

惯例:

typedef void* (*_malloc_fail_handler_ptr)(int) __attribute__ ((unused));
_malloc_fail_handler_ptr _malloc_fail_handler = NULL;
Run Code Online (Sandbox Code Playgroud)

我的"非预期"代码:

typedef void* (_malloc_fail_handler_ptr)(int) __attribute__ ((unused));
_malloc_fail_handler_ptr* _malloc_fail_handler = NULL;
Run Code Online (Sandbox Code Playgroud)

son*_*yao 5

这是正确的语法.对于第二种情况,类型_malloc_fail_handler_ptr是函数,而不是函数指针.然后_malloc_fail_handler_ptr*是指向函数的指针的类型.因此对于第一和第二种情况,变量的类型_malloc_fail_handler是相同的.