访问双指针

typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS {

ULONG尺寸;

WdfUsbTargetDeviceSelectConfigType类型;

联盟{

struct { PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; PUSB_INTERFACE_DESCRIPTOR* InterfaceDescriptors; ULONG NumInterfaceDescriptors; } Descriptor; struct { PURB Urb; } Urb; struct { UCHAR NumberConfiguredPipes; WDFUSBINTERFACE ConfiguredUsbInterface; } SingleInterface; struct { UCHAR NumberInterfaces; PWDF_USB_INTERFACE_SETTING_PAIR Pairs; UCHAR NumberOfConfiguredInterfaces; } MultiInterface; 

}类型;

} WDF_USB_DEVICE_SELECT_CONFIG_PARAMS,* PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS;

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS参数;

typedef struct _USB_INTERFACE_DESCRIPTOR {

UCHAR bLength;

UCHAR bInterfaceClass;

UCHAR bInterfaceSubClass;

} USB_INTERFACE_DESCRIPTOR,* PUSB_INTERFACE_DESCRIPTOR;

能够通过 – > params.Types.Descriptor.NumInterfaceDescriptors访问NumInterfaceDescriptors

我想通过WDF_USB_DEVICE_SELECT_CONFIG_PARAMS访问bInterfaceClass。 请注意,这个结构由我必须访问它的库填充

 (*someIntDesc)->iInterface 
 IntDesc foo; // somehow initialize foo to actually point to (a pointer to) a valid structure (*foo)->iInterface = 10; 

IntDesc是一种类型,而不是变量。 所以你需要做的第一件事就是创建一个正确类型的变量:

 IntDesc id; 

接下来,您需要让它指向已分配的内存。 我要把所有东西放在堆栈上,你可能有其他需求:

 USB_INTERFACE_DESCRIPTOR usb; PUSB_INTERFACE_DESCRIPTOR pusb = &usb; id = &pusb; 

既然你有一个有效的指针,你可以继续取消引用它。 由于这是一个双指针,您需要将其解除引用两次:

 (*(*id)).iInterface = 10; 

因为C定义->作为*和的组合. ,你可以更简洁地表达:

 (*id)->iInterface = 10; 

从名称InterfaceDescriptors ,它似乎指向结构的指针数组。 所以更惯用的方式是:

 InterfaceDescriptors[0]->iInterface = 10; 

像这样尊重它

 (*intDesc)->iInterface 

你的代码非常错误

 NODE* ptr; kNiInterface = 100; ptr = (NODE*)malloc(sizeof(NODE)); 

在访问之前:

 ptr->N1->iInterface 

N1应初始化为某种东西。