我们什么时候需要&当传递函数时?

发布于 2024-11-16 15:04:40 字数 319 浏览 1 评论 0原文

我发现这些工作类型的代码:

hash_init.key       = &hash_key_lc;  

这里

ls->handler = init_connection;

hash_key_lcinit_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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无畏 2024-11-23 15:04:40

这与以下问题相同:
在 C 中,什么作为参数传递时,“&function”和“function”之间有什么区别?

那里接受的答案:

没有什么区别。供证据
请参阅 C99 规范(部分
6.7.5.3.8)。

“参数声明为
“函数返回类型”应为
调整为“函数指针”
返回类型'',如 6.3.2.1 中所示。”

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:

There is no difference. For evidence
see the C99 specification (section
6.7.5.3.8).

"A declaration of a parameter as
‘‘function returning type’’ shall be
adjusted to ‘‘pointer to function
returning type’’, as in 6.3.2.1."

时光病人 2024-11-23 15:04:40

function 上的 reference/deference 被视为 c 中的语言特殊情况,因为 function 值得这种类型特殊情况,不能通过某个传递,只能通过地址/引用传递。

reference/deference on a function is treated as a language special case in c,as function deserves this kind of special case ,it can't be passed by a certain value,you can only pass it by address/reference.

谁对谁错谁最难过 2024-11-23 15:04:40

参见 C99 第 6.3.2.1 节,§4:

函数指示符
具有函数类型的表达式。
除非它是操作数
sizeof 运算符或一元 &
运算符,一个函数指示符
类型“返回类型的函数”是
转换为一个表达式
type '' 指向函数返回的指针
输入''。

因此,如果 foo 是一个函数,则表达式 foo&foo 大多数情况下是可以互换的,特别是

foo == &foo

这类似于带有数组的表达式type 隐式转换为指针类型的表达式。另外,如果fp是函数指针,则可以在有或没有解引用的情况下调用它,即表达式

(*fp)(42)

fp(42)

是等效的。函数调用实际上是根据函数指针(第 6.5.2.2 §1 节)而不是函数指示符来定义的,即就语言语义而言,第一个示例中的 *fp 将隐式转换回 < code>fp 在应用括号之前。

See C99 section 6.3.2.1, §4:

A function designator is an
expression that has function type.
Except when it is the operand of the
sizeof operator or the unary &
operator, a function designator with
type ‘‘function returning type’’ is
converted to an expression that has
type ‘‘pointer to function returning
type’’.

Thus, if foo is a function, the expressions foo and &foo are mostly interchangeable, in particular

foo == &foo

This 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 expressions

(*fp)(42)

and

fp(42)

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 to fp before the parens are applied.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文