C结构语法

Cco*_*ock 5 c syntax

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.如果一个触摸变量而另一个在字体之间有空格,那么这些指针别名是否意味着不同的东西*

ant*_*ron 5

typedef通过类似于变量声明来理解C 声明.

int a, *b;
Run Code Online (Sandbox Code Playgroud)

声明a类型intb类型的值int*.

typedef int A, *B;
Run Code Online (Sandbox Code Playgroud)

声明A等效的类型intB等效的类型int*.所以,如果这是一个变量声明,只需考虑变量类型是什么.

所以,是的,PUKWD_USB_DEVICE_INFO相当于struct _UKWD_USB_DEVICE_INFO*.

编辑

而且,空间无关紧要.C是一种空白语言.额外的别名不是必需的,它们只是适合各种项目和API的约定,它们喜欢通过包含P其他子串的名称来调用指针类型.有时这些项目会随着时间的推移而出现多个约定,因此有多个别名.当API更新时,或者在不同平台之间,出于兼容性原因,也可能需要它们.