C标头示例。
typedef LPVOID UKWD_USB_DEVICE;
typedef struct _UKWD_USB_DEVICE_INFO {
DWORD dwCount;
unsigned char Bus;
unsigned char Address;
unsigned long SessionId;
USB_DEVICE_DESCRIPTOR Descriptor;
} UKWD_USB_DEVICE_INFO, *PUKWD_USB_DEVICE_INFO, * LPUKWD_USB_DEVICE_INFO;
我的理解
struct
定义结构({}之间的部分)。结构的类型为_UKWD_USB_DEVICE_INFO
。在关闭之后}
UKWD_USB_DEVICE_INFO
是此结构的别名。
问题
此后声明的目的是什么。* PUKD_USB_DEVICE_INFO
和*LPUKWD_USB_DEVICE_INFO
。如果一个指针触摸变量而另一个触摸*
字母和字母之间有空格,这些指针别名是否会有所不同?
Ctypedef
声明通过类比变量声明来理解。
int a, *b;
声明a
typeint
和b
type的值int*
。
typedef int A, *B;
声明A
等于的类型int
和B
等于的类型int*
。因此,请考虑一下如果这是一个变量声明,那么变量类型将是什么。
因此,是,PUKWD_USB_DEVICE_INFO
等同于struct _UKWD_USB_DEVICE_INFO*
。
编辑
同样,空间也没有关系。C是一种空白语言。多余的别名不是必需的,它们恰好适合各种项目和API的约定,这些约定喜欢通过包含P
或其他子字符串的名称来调用指针类型。有时,随着时间的推移,这些项目最终会采用多种约定,因此会有多种别名。当更新API或在不同平台之间时,出于兼容性原因,也可能需要它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句