C ++指针函数和非指针函数

多博

给定打印功能:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章