[英]What does this means in C? AB->CD->Func(param)
好吧,讓我解釋一下。 我有一個指針來構造AB
型struct1
結構內部有一個指針到另一個名為結構CD
類型的struct2
和的定義struct2
有一定原型功能,包括Func(param)
如果有人可以幫助我了解一點,我將非常感激。
是的,代碼是針對微控制器中的USB主機的,我沒有添加代碼,因為它可以解決問題,但是在這里,
電話是:
void USBHOST_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost){
...
if (phost->usr_cb->UserInput() == USBH_USR_RESP_OK){
...
}
...
}
typedef struct _Host_TypeDef
{
HOST_State gState; /* Host State Machine Value */
HOST_State gStateBkp; /* backup of previous State machine value */
ENUM_State EnumState; /* Enumeration state Machine */
CMD_State RequestState;
USBH_Ctrl_TypeDef Control;
USBH_Device_TypeDef device_prop;
USBH_Class_cb_TypeDef *class_cb;
USBH_Usr_cb_TypeDef *usr_cb;
} USBH_HOST, *pUSBH_HOST;
typedef struct _USBH_USR_PROP
{
void (*Init)(void); /* HostLibInitialized */
void (*DeInit)(void); /* HostLibInitialized */
void (*DeviceAttached)(void); /* DeviceAttached */
void (*ResetDevice)(void);
void (*DeviceDisconnected)(void);
void (*OverCurrentDetected)(void);
void (*DeviceSpeedDetected)(uint8_t DeviceSpeed); /* DeviceSpeed */
void (*DeviceDescAvailable)(void *); /* DeviceDescriptor is available */
void (*DeviceAddressAssigned)(void); /* Address is assigned to USB Device */
void (*ConfigurationDescAvailable)(USBH_CfgDesc_TypeDef *,
USBH_InterfaceDesc_TypeDef *,
USBH_EpDesc_TypeDef *);
/* Configuration Descriptor available */
void (*ManufacturerString)(void *); /* ManufacturerString*/
void (*ProductString)(void *); /* ProductString*/
void (*SerialNumString)(void *); /* SerialNubString*/
void (*EnumerationDone)(void); /* Enumeration finished */
USBH_USR_Status (*UserInput)(void);
int (*UserApplication) (void);
void (*DeviceNotSupported)(void); /* Device is not supported*/
void (*UnrecoveredError)(void);
}
USBH_Usr_cb_TypeDef;
現在,我了解了它的作用,但是找不到UserInput(void)的定義,也找不到它的作用。
您所說的“一些函數的原型,包括Func(param)
”是一個函數指針 。 您可以調用指針指向的函數,就像指針代表該函數的名稱一樣。 最里面的結構已經建立了指向某個函數的指針。 您的代碼段通過其指針調用該函數。
這是一個簡短的示例,說明了它是如何工作的( 也適用於ideone ):
#include <stdio.h>
typedef struct {
void (*func)(int);
} with_fp;
void test(int n) {
printf("Test %d\n", n);
}
int main(void) {
with_fp s = {.func = test};
with_fp *ptr = &s;
ptr->func(123);
return 0;
}
它使用這些參數調用結構struct2
的函數Func()
。
函數Func()
是指向函數的指針,是組成函數的指令的起始指針(內存地址)。
請參見C中的函數指針如何工作? 進行解釋。
作為變量的指針必須在用於調用之前進行設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.