C header 示例。
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
是an alias to this structure。问题
之后声明的目的是什么。
* PUKD_USB_DEVICE_INFO
和*LPUKWD_USB_DEVICE_INFO
。如果一个人触摸变量,而另一个在*
和字母之间留有空格,则Do these pointer aliases的含义有所不同吗? 最佳答案
可以将C typedef
声明与变量声明进行类比。
int a, *b;
声明
a
类型的int
和b
类型的int*
的值。typedef int A, *B;
声明等于
A
的int
类型和等于B
的int*
类型。因此,请考虑一下如果这是一个变量声明,那么变量类型将是什么。因此,是的,
PUKWD_USB_DEVICE_INFO
等同于struct _UKWD_USB_DEVICE_INFO*
。编辑
同样,空间也没有关系。 C是一种空白语言。多余的别名不是必需的,它们恰好适合各种项目和API的约定,这些约定喜欢通过包含
P
或其他子字符串的名称来调用指针类型。有时,随着时间的推移,这些项目最终会具有多种约定,因此会有多种别名。出于兼容性原因,在更新API时或在不同平台之间也可能需要使用它们。关于C结构语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30277972/