【问题标题】:Why sending function to a function is the same as sending function address? [duplicate]为什么向函数发送函数与发送函数地址相同? [复制]
【发布时间】:2021-03-24 19:56:09
【问题描述】:

在 C 语言中有一件事情对我来说总是很奇怪,当在函数参数中使用函数指针时,为什么发送函数名与发送函数地址是一样的?

void bar(void (*functionPtr)())
{
    doSomething
}

void foo(void)
{
    doSomething
}

int main()
{
    bar(&foo);
    bar(foo); // why is this the same? In C logic it's not supposed to work
    return (0);
}

【问题讨论】:

  • 您是否希望发送整个函数,机器字节?发送数组地址的原因相同。复制既浪费又耗时。
  • C 2018 6.3.2.1 4 说“函数指示符是具有函数类型的表达式。除非它是 sizeof 运算符或一元 & 运算符的操作数,否则类型为“函数返回 type”的函数指示符将转换为类型为“指向函数的指针”的表达式返回类型”。”

标签: c function-pointers


【解决方案1】:

因为& 是自动的。如果你使用函数名,它会产生一个指向函数的指针。如果您阅读语言规范,您会发现& 在这里是可选的。

【讨论】:

  • 好的,最后看起来很合乎逻辑,因为没有任何情况下您想要发送函数对象
  • 什么意思,& 是自动的?
  • 我的意思是,如果你忽略了&,它无论如何都会这样做。就像写+123 vs 123,即使你不提也是积极的。
猜你喜欢
  • 1970-01-01
  • 2015-02-19
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 2023-04-05
  • 1970-01-01
  • 2019-06-04
相关资源
最近更新 更多