C结构语法

扫码查看

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_INFOan alias to this structure

问题

之后声明的目的是什么。 * PUKD_USB_DEVICE_INFO*LPUKWD_USB_DEVICE_INFO。如果一个人触摸变量,而另一个在*和字母之间留有空格,则Do these pointer aliases的含义有所不同吗?

最佳答案

可以将C typedef声明与变量声明进行类比。

int a, *b;

声明a类型的intb类型的int*的值。
typedef int A, *B;

声明等于Aint类型和等于Bint*类型。因此,请考虑一下如果这是一个变量声明,那么变量类型将是什么。

因此,是的,PUKWD_USB_DEVICE_INFO等同于struct _UKWD_USB_DEVICE_INFO*

编辑

同样,空间也没有关系。 C是一种空白语言。多余的别名不是必需的,它们恰好适合各种项目和API的约定,这些约定喜欢通过包含P或其他子字符串的名称来调用指针类型。有时,随着时间的推移,这些项目最终会具有多种约定,因此会有多种别名。出于兼容性原因,在更新API时或在不同平台之间也可能需要使用它们。

关于C结构语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30277972/

10-12 00:17
查看更多