【问题标题】:Cryptic C++ "thing" (function pointer)神秘的 C++“事物”(函数指针)
【发布时间】:2010-05-03 15:38:03
【问题描述】:

这种语法在 C++ 中的用途是什么?有人可以指出我的技术术语,以便我可以查看是否在我的文本中找到任何内容?

起初我以为它是一个原型,但后来 =(*fn) 让我失望了......

这是我的例子:

void (*fn) (int&,int&) = x;

【问题讨论】:

  • 谷歌搜索“左右规则”。您可能还对 cdecl 工具感兴趣。
  • 谢谢大家。我没有玩过函数指针,但现在我更好地理解了函数指针。
  • 您可以随时使用cdecl.org 获得一些帮助阅读内容。

标签: c++ function pointers


【解决方案1】:

可以改写成

typedef void (*T) (int&, int&);
T fn = x;

第二条语句很明显,它应该解决了= x; 的问题。在第一个语句中,我们将T 作为void(*)(int&, int&) 类型的同义词,这意味着:

  • 指向函数的指针 ((*…))
  • 返回void
  • 并采用 2 个参数:int&, int&

【讨论】:

    【解决方案2】:

    这是一个函数指针,指向一个带有两个int 引用参数的函数,它什么也不返回。函数指针被称为fn,并被赋值为x

    【讨论】:

      【解决方案3】:

      这声明并初始化了一个函数指针。

      变量的名称是fn,它指向一个具有以下签名的函数:

      void pointedToFunction(int&, int&)
      

      变量fn被初始化为x中包含的值。

      可以使用以下语法调用指向的函数:

      int a;
      int b;
      (*fn)(a,b);
      

      这相当于

      int a;
      int b;
      pointedToFunction(a,b);
      

      【讨论】:

        【解决方案4】:

        函数指针。

        http://www.newty.de/fpt/intro.html#what

        ^ 适合初学者的源代码。 :-)

        【讨论】:

          【解决方案5】:

          这是一个指向函数的指针,该函数接受两个对ints 的引用并返回void

          【讨论】:

            【解决方案6】:

            这似乎是一个指向方法的函数指针,该方法接受两个整数引用并且不返回任何内容。指针将命名为 fn。您将它分配给 x 的地址,希望它是一个与此描述匹配的函数。

            【讨论】:

              【解决方案7】:

              它是一个函数指针,指向一个以 2 个整数作为参数并返回 void 的函数。 x 必须是函数名。

              【讨论】:

              • 实际上,它们是对整数的引用,而不是整数(不,我不是反对者)
              【解决方案8】:

              这是一个函数指针变量,被初始化为=右侧的内容。

              函数类型可以这样写:

              typedef void func_t(int&,int&);
              

              函数指针比:

              typedef func_t *fn_t;
              

              有了这些定义,变量声明会更清晰:

               fn_t fn = ...;
              

              【讨论】:

                【解决方案9】:

                带有一些关于该主题的链接的维基百科页面:http://en.wikipedia.org/wiki/Function_pointer

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-04-16
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-01-11
                  • 2017-04-23
                  • 2013-10-19
                  • 2015-04-24
                  相关资源
                  最近更新 更多