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;
Run Code Online (Sandbox Code Playgroud)
我的理解
struct定义一个结构({}之间的部分).结构的类型是_UKWD_USB_DEVICE_INFO.结束后} UKWD_USB_DEVICE_INFO是此结构的别名.
题
之后声明的目的是什么?* PUKD_USB_DEVICE_INFO和*LPUKWD_USB_DEVICE_INFO.如果一个触摸变量而另一个在字体之间有空格,那么这些指针别名是否意味着不同的东西*?
typedef通过类似于变量声明来理解C 声明.
int a, *b;
Run Code Online (Sandbox Code Playgroud)
声明a类型int和b类型的值int*.
typedef int A, *B;
Run Code Online (Sandbox Code Playgroud)
声明A等效的类型int和B等效的类型int*.所以,如果这是一个变量声明,只需考虑变量类型是什么.
所以,是的,PUKWD_USB_DEVICE_INFO相当于struct _UKWD_USB_DEVICE_INFO*.
编辑
而且,空间无关紧要.C是一种空白语言.额外的别名不是必需的,它们只是适合各种项目和API的约定,它们喜欢通过包含P其他子串的名称来调用指针类型.有时这些项目会随着时间的推移而出现多个约定,因此有多个别名.当API更新时,或者在不同平台之间,出于兼容性原因,也可能需要它们.