鉴于打印功能:C++指针函数和非指针功能
void print(int i)
{
cout << i << endl;
}
为什么我们允许这样做的主要功能:
void (*bar)(int);
bar = &print;
但不是这样的:
void fizz(int);
fizz = print;
但是,当涉及到函数参数时,我们可以将指针传递给函数n或该功能的副本:
void foo(void (*f)(int))
{
(*f)(1);
}
void test(void f(int))
{
f(1);
}
有人知道这些差异的原因吗?
bar的定义是函数指针的正确语法,而fizz只是定义函数签名的语法。我不熟悉你的函数测试的语法,所以我希望别人可以清除它。 – Parappa
请参阅http://stackoverflow.com/questions/26559758/function-to-function-pointer-decay – sfjac
就像使用数组类型作为函数参数一样,它将转换为指向第一个元素的指针。显然这只能在函数声明中使用。不寻常的,但不是没有使用。 – Macmade