static void (* __set_malloc_handler(void (*__f)()))();
我认为__set_malloc_handler
是一个函数指针,它指向一个函数,它也需要一个函数指针。但是,我不知道如何理解整个陈述。它是如何工作的?了解这个复杂的声明
static void (* __set_malloc_handler(void (*__f)()))();
我认为__set_malloc_handler
是一个函数指针,它指向一个函数,它也需要一个函数指针。但是,我不知道如何理解整个陈述。它是如何工作的?了解这个复杂的声明
使用某些别名更容易理解。
//pointer to function taking no arguments and void return
typedef void(*function_pointer)();
//function taking "function_pointer" and returning "function_pointer"
function_pointer __set_malloc_handler(function_pointer __f);
要阅读类似的东西,我建议right-left rule。这是我总是使用的。还有一个spiral rule,但是当它没有形成一个完美的螺旋时,我会感到恼火,而我却因为注意力而分心。你可能不会有这个问题。
这两个页面上的解释更彻底,但是这里有一个速成课程。
本质上,读这些符号为:
*
= “指针”(...)
= “功能服用...
”[...]
=“大小...
的数组”向右阅读,直到找到没有匹配01的呢。然后向左边读,直到找到一个(
与之匹配。再次开始阅读。如果你点击右边的那一行,你会看完左边的内容。
标识符__set_malloc_handler
的右侧是一个开放的小括号(
,表示它是一个函数。从那个到匹配)
的所有内容都是参数类型。我建议先忽略它,然后再回来。一步一步:
__set_malloc_handler(...) //function taking ...
(*__set_malloc_handler(...)) //and returning a pointer
(*__set_malloc_handler(...))() //to a function taking no arguments
void (*__set_malloc_handler(...))() //that returns void
的参数来看,我们有:
(*__f) //pointer
(*__f)() //to function taking no arguments
void (*__f)() //and returning void
非常感谢。我喜欢右倾的规则,我从中学到了很多东西。你给了我一条鱼,教我如何钓鱼。再次感谢你。 – Taylor
__set_malloc_handler
是一个函数,需要一个“函数指针为void功能”,并返回一个“函数指针为void功能”。关键字static
仅对当前文件可见。
'__set_malloc_handler'是一个函数,而不是函数指针。它是参数,返回值是函数指针。 –
[顺时针\螺旋线规则](http://c-faq.com/decl/spiral.anderson.html) – Mahesh
或者,您可以在[左右规则](http:// ieng9。 ucsd.edu/~cs30x/rt_lt.rule.html)。 –