【问题标题】:the typedef of pointer in c languagec语言指针的typedef
【发布时间】:2011-07-25 13:54:22
【问题描述】:

我有一个关于 c 语言中 typedef 的问题。 我阅读了以下代码:

typedef void* (*RT) (int a, int b);

本例中的 typedef 是什么?

【问题讨论】:

标签: c typedef


【解决方案1】:

我建议你使用古老的“螺旋法”:

           +---------------------------------+
           |  +-------------------+          |
           |  |   +----+          |          |
           |  |   |    |          |          |
           V  V   V    |          |          |
 typedef void * ( * RT | ) (int a, int b);   |
              |   | |  |          ^          |
              |   | +--+          |          |
              |   +---------------+          |
              +------------------------------+

按照您可以阅读的内容:

  • RT 是 ...
  • 指向...的指针
  • 一个函数返回...
  • 指向...的指针
  • 无效

您从类型名称开始,左右移动(如示例中的括号)。

【讨论】:

  • 没听说过这个,有趣。
  • 发表在古老的“计算机语言”一期。实际上,“螺旋”是我自己的补充,但这个概念是他们的。我发现这样我记得更好。
【解决方案2】:

这是指向返回 void 并接受两个 int 参数的函数的指针。类型名称为RT

当你有这样的疑惑时,一个非常有用的工具是cdecl.org

【讨论】:

    【解决方案3】:
            RT                  // RT
          (*RT)                 // is a pointer to
          (*RT) (               // a function
          (*RT) (int a, int b); // taking two ints and returning 
        * (*RT) (int a, int b); // a pointer to
    void* (*RT) (int a, int b); // void
    

    【讨论】:

      【解决方案4】:

      cdecl:

      declare RT as pointer to function (int, int) returning pointer to void
      

      【讨论】:

        【解决方案5】:

        RT 是一个指向函数的指针,该函数接受两个整数作为参数并返回一个void *(通用指针)。

        【讨论】:

          【解决方案6】:

          你正在定义一个函数指针。 RT 是 typedef 的名称,void* 是它的返回类型,两次 int 是函数的参数类型。

          【讨论】:

            【解决方案7】:

            此声明创建 RT 作为类型定义名称(同义词),用于类型“指向函数的指针,采用两个 int 参数并返回指向 void 的指针”。然后,您将使用 RT 声明该类型的对象,如下所示:

            RT foo, bar;
            

            相对于写作

            void *(*foo)(int a, int b), *(*bar)(int a, int b);
            

            void *(*foo)(int a, int b);
            void *(*bar)(int a, int b);
            

            【讨论】:

              【解决方案8】:

              这将为指向名称RT 的函数指针创建一个typedef。这通常用于库中的回调函数。所以当需要回调函数时,函数签名可以更简洁地写成*RT而不是完整的签名。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-07-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-12-05
                • 2011-01-16
                相关资源
                最近更新 更多