【发布时间】: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