【问题标题】:accessing Double pointer访问双指针
【发布时间】:2010-01-18 05:36:11
【问题描述】:

typedef 结构 _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS {

超长尺寸;

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 结构 _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。 请注意,这个结构由库填充,我必须访问它

【问题讨论】:

  • 为什么要 IntDesc 类型是双指针? typedef PUSB_INTERFACE_DESCRIPTOR* IntDesc;使用单个指针不是更容易吗?这里的另一层间接有什么好处?
  • 嘿,伙计...你已经两次大大改变了问题,每次打破以前的有效答案,每次打破其他人的布局以前为您修复过。我对那些对别人的时间如此粗心的人没有耐心。 -1 来自我,我不会再费心编辑/回答您的问题。
  • 哦,顺便说一句,这现在是 stackoverflow.com/questions/2085761/… 的副本

标签: c pointers structure


【解决方案1】:
(*someIntDesc)->iInterface

【讨论】:

    【解决方案2】:
    IntDesc foo;
    // somehow initialize foo to actually point to (a pointer to) a valid structure
    (*foo)->iInterface = 10;
    

    【讨论】:

    • 你是对的,当然。我不应该走语言捷径。
    【解决方案3】:

    像这样尊重它

    (*intDesc)->iInterface
    

    【讨论】:

      【解决方案4】:

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

      IntDesc id;
      

      接下来,您需要让它指向分配的内存。我要把所有东西都入栈,你可能还有其他需求:

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

      现在您有了一个有效的指针,您可以继续取消引用它。由于这是一个双指针,您需要将其取消引用两次:

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

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

      (*id)->iInterface = 10; 
      

      【讨论】:

        【解决方案5】:

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

        InterfaceDescriptors[0]->iInterface = 10;
        

        【讨论】:

          【解决方案6】:

          你的代码错了

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

          在访问之前:

          ptr->N1->iInterface
          

          N1 应该被初始化为某个东西。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-16
            • 1970-01-01
            • 2013-11-02
            • 1970-01-01
            • 1970-01-01
            • 2015-12-01
            • 1970-01-01
            相关资源
            最近更新 更多