繁体   English   中英

访问一个typedef结构数组

[英]Accessing an array of typedef struct

嗨,大家好,我正在为打印机主机开发基于Microchip的PIC32MX的示例,其中遇到了以下程序中的以下代码,以找出要使用的客户端驱动程序(如果使用了循环)。我无法理解循环的执行,

我想知道if循环如何返回1或0,我被困在def类型为usb_client_init函数指针,而且我也不了解CLIENT_DRIVER_TABLE usbClientDrvTable []数组的工作方式,它如何决定使用哪个函数。 初始化.operator应该调用指针函数* USB_CLIENT_INIT,但是它们不是USB_CLIENT_INIT的定义,只能被声明。

    typedef BOOL (*USB_CLIENT_INIT)  (BYTE, DWORD ,BYTE);

        typedef struct _CLIENT_DRIVER_TABLE {
            USB_CLIENT_INIT Initialize;     // Initialization routine  

          } CLIENT_DRIVER_TABLE;

        CLIENT_DRIVER_TABLE usbClientDrvTable[] = {   
         {                                     
            USBHostPrinterInitialize,    // It is a function 
            USBHostPrinterEventHandler,  // It is a function 
            0
         },

         { USBHostPrinterInitialize,    // It is a function 
            USBHostPrinterEventHandler,  // It is a function 
           1
         }   
     };


void main()
{


while(1)
{
char temp=0;
  if( !usbClientDrvTable[temp].Initialize(a,b,c))
  {
  //do something 

  }

}

    }

好像您从struct _CLIENT_DRIVER_TABLE删除了两行。 也应该有EventHandlerflags

第一个typedef声明USB_CLIENT_INIT为指向具有3个变量并返回布尔值的函数的指针。 (您缺少事件处理程序的类似声明。)

下一个typedef声明表的一行。 它应该包含三部分,但是您剩下的只有Initialize部分,这是USB_CLIENT_INIT类型的函数指针。

接下来,声明其中两个条目的数组。 {}表示这两个条目应包含三个部分,而不仅仅是一个部分。

最后,使用此数组。

usbClientDrvTable[0]是数组的第一个元素。

usbClientDrvTable[0].Initialize是第一个结构中的函数指针。 (已定义为USBHostPrinterInitialize 。)

usbClientDrvTable[0].Initialize(a,b,c)是将该函数应用于值a,b和c的布尔结果。 这与USBHostPrinterInitialize(a,b,c)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM