簡體   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