繁体   English   中英

c语言中指针的typedef

[英]the typedef of pointer in c language

我对c语言中的typedef有疑问。 我阅读了以下代码:

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

这个例子中的typedefed是什么?

我建议你用好旧的“螺旋法”:

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

您可以阅读以下内容:

  • RT是......
  • 一个指向...的指针
  • 一个函数返回...
  • 一个指向...的指针
  • 空虚

您从类型名称开始,然后向右移动然后向左移动(如示例中所示,遵循括号)。

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

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

        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

cdecl

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

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

您正在键入一个函数指针。 RT是typedef的名称, void*其返回类型,两次int是函数的参数类型。

此声明将RT作为typedef名称(同义词)创建类型“指向函数的指针,该函数接受两个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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM