[英]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); |
| | | | ^ |
| | +--+ | |
| +---------------+ |
+------------------------------+
您可以阅读以下内容:
您从类型名称开始,然后向右移动然后向左移动(如示例中所示,遵循括号)。
这是指向返回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.