我们什么时候需要&当传递函数时?
我发现这些工作类型的代码:
hash_init.key = &hash_key_lc;
这里
ls->handler = init_connection;
hash_key_lc
和 init_connection
都是函数,但一个是 &
另一个不是,为什么?
更新
所以它们是同一件事,但合理性是什么?
I found these work types of code:
hash_init.key = &hash_key_lc;
And
ls->handler = init_connection;
Here both hash_key_lc
and init_connection
are functions,but one is with &
the other not,why?
UPDATE
so they are the same thing,but what's the rational??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这与以下问题相同:
在 C 中,什么作为参数传递时,“&function”和“function”之间有什么区别?
那里接受的答案:
This is identical to the following question:
In C, what is the difference between `&function` and `function` when passed as arguments?
The accepted answer there:
function
上的reference/deference
被视为c
中的语言特殊情况,因为function
值得这种类型特殊情况,不能通过某个值
传递,只能通过地址/引用
传递。reference/deference
on afunction
is treated as a language special case inc
,asfunction
deserves this kind of special case ,it can't be passed by a certainvalue
,you can only pass it byaddress/reference
.参见 C99 第 6.3.2.1 节,§4:
因此,如果
foo
是一个函数,则表达式foo
和&foo
大多数情况下是可以互换的,特别是这类似于带有数组的表达式type 隐式转换为指针类型的表达式。另外,如果
fp
是函数指针,则可以在有或没有解引用的情况下调用它,即表达式和
是等效的。函数调用实际上是根据函数指针(第 6.5.2.2 §1 节)而不是函数指示符来定义的,即就语言语义而言,第一个示例中的
*fp
将隐式转换回 < code>fp 在应用括号之前。See C99 section 6.3.2.1, §4:
Thus, if
foo
is a function, the expressionsfoo
and&foo
are mostly interchangeable, in particularThis is similar to how expressions with array type are implicitly converted to expressions with pointer type. Also, if
fp
is a function pointer, you can call it with or without dereferencing, ie the expressionsand
are equivalent. Function calls are actually defined in terms of function pointers (section 6.5.2.2 §1) and not function designators, ie as far as language semantics go,
*fp
in the first example will implicitly converted back tofp
before the parens are applied.