访问双指针

时间:2010-01-18 05:36:11

标签: c pointers structure

typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS {

ULONG尺寸;

WdfUsbTargetDeviceSelectConfigType类型;

union {

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;

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

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

6 个答案:

答案 0 :(得分:4)

(*someIntDesc)->iInterface

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

IntDesc id;

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

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

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

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

由于C将->定义为*.的组合,因此您可以更简洁地表达:

(*id)->iInterface = 10; 

答案 3 :(得分:1)

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

InterfaceDescriptors[0]->iInterface = 10;

答案 4 :(得分:0)

像这样尊重

(*intDesc)->iInterface

答案 5 :(得分:0)

您的代码非常错误

NODE* ptr;
k.N.iInterface = 100;
ptr = (NODE*)malloc(sizeof(NODE));

在访问之前:

ptr->N1->iInterface

N1应初始化为某种东西。