给定打印功能:
void print(int i)
{
cout << i << endl;
}
为什么在主要功能中允许这样做:
void (*bar)(int);
bar = &print;
但这不是:
void fizz(int);
fizz = print;
但是当涉及到函数参数时,我们可以将指针传递给函数或该函数的副本:
void foo(void (*f)(int))
{
(*f)(1);
}
void test(void f(int))
{
f(1);
}
有人知道这些差异的原因吗?
函数指针可以指向具有相同参数和返回类型的任何函数。在上面的代码中,“ bar”是一个指针,bar=&print
表示让其bar
指向print
。但是,功能不能=
起作用。
对于函数指针来说,有什么好处,只要函数具有相同的参数和返回类型,它就可以指向ANY函数。当函数指针用作另一个函数的参数时,这被证明是非常有用的。
当函数用作参数时,传递的真实内容是函数的地址。一个函数不能被取消引用传递(即不能作为一个函数传递)。我不太清楚,但是看来您对foo
和的实现test
是相同的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句