【问题标题】:The ambiguous star operator on function name [duplicate]函数名称上的模棱两可的星号运算符[重复]
【发布时间】:2014-09-16 07:55:31
【问题描述】:

只是一个最小的工作示例:

#include <stdio.h>

void foo(char* str)
{
    printf("%s\n", str);
}

main()
{
   foo("foo");
   (* foo)("* foo");
}

哪个输出

foo
* foo

我认为函数名应该是代码段中例程的地址,所以星号运算符应该返回一个可执行指令。但是这个运算符实际上是如何在这里工作的呢? 感谢您提供一些启示。

【问题讨论】:

  • 也可以把(&amp;foo)("&amp; foo") 扔进去。

标签: c++ c pointers function-pointers


【解决方案1】:

在 C 中,函数不是值,您不能“取消引用指向函数的指针”并获得有意义的东西(值)。

因此,尝试取消引用并调用这样的指针并没有额外的效果,它与首先通过指针调用相同。

【讨论】:

  • @Angew 谢谢,我澄清说我主要是在谈论 C。
  • C++,另一方面,确实区分函数指针和函数引用。您可以通过取消引用前者来获得后者。只是为函数指针定义了运算符(),存在从(引用)函数到函数指针的隐式转换。
  • 相应地改写了评论:-)
猜你喜欢
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2012-02-16
相关资源
最近更新 更多