我发现这些工种代码:我们什么时候需要和何时传递函数?
hash_init.key = &hash_key_lc;
而且
ls->handler = init_connection;
这里既有hash_key_lc
和init_connection
的功能,但一个是&
其他没有,为什么呢?
UPDATE
所以他们是同样的事情,但什么是理性?
我发现这些工种代码:我们什么时候需要和何时传递函数?
hash_init.key = &hash_key_lc;
而且
ls->handler = init_connection;
这里既有hash_key_lc
和init_connection
的功能,但一个是&
其他没有,为什么呢?
UPDATE
所以他们是同样的事情,但什么是理性?
reference/deference
被视为语言的特殊情况c
,因为function
值得这种特殊情况下,它不能由某个value
过去了,你只能通过address/reference
通过。
这等同于以下问题: In C, what is the difference between `&function` and `function` when passed as arguments?
接受的答案有:
没有区别。为证据 请参阅C99 specification(部分 6.7.5.3.8)。
“的参数作为 ‘‘函数返回类型’’的声明应 调节到‘‘函数指针 返回类型’’,如在6.3.2.1”。在
function
@迈克,但这不一致,一个指针('*')和一个指针指针('**')没有区别? –
如果您有足够的代表,请将副本作为评论发布,而不是答案,并投票结束。 -1 –
@new_perl它不是void(*)(void)'(指向函数的指针)和'void(**)(void)'(指向指向函数的指针),它是'void(void)'(function )和'void(*)(void)'。当作为参数传递时,函数被转换为指向函数的指针。 –
见C99部分6.3.2.1,§4:
甲功能指示符是 表达具有函数类型。 除了当它是
sizeof
操作者的操作数或一元&
操作,功能指示器与 类型“”函数返回类型“”是 转换到具有 类型“”函数指针返回一个表达 类型''。
因此,如果foo
是一个函数,表达式foo
和&foo
大多可互换的,特别是
foo == &foo
这类似于如何与阵列型表达式隐式转换为与指针类型表达式。另外,如果fp
是一个函数指针,你可以有或无解引用调用它,即表达
(*fp)(42)
和
fp(42)
是等价的。函数调用实际上是根据函数指针(6.5.2.2§1)定义的,而不是函数指示符,即就语言语义而言,第一个示例中的*fp
将在应用parens之前隐式转换回fp
。
可能的重复[在C中,当作为参数传递时,'&function'和'function'有什么区别?](http://stackoverflow.com/questions/6293403/in-c-what-is-the函数和函数之间的差异当传递为ar) –