这在C中是什么意思?AB->;CD->;函数(参数)
好的,让我再解释一下。我有一个指向结构这在C中是什么意思?AB->;CD->;函数(参数),c,C,好的,让我再解释一下。我有一个指向结构ABtypestruct1的指针,在结构内部有一个指向另一个名为CD的struct2类型结构的指针,struct2的定义有一些函数原型,包括Func(param)。如果有人能帮我理解一点,我将非常感激 是的,代码是针对微控制器中的USB主机的,我没有添加代码,因为它可以解决问题,但在这里 电话是: void USBHOST_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost){ ...
AB
typestruct1
的指针,在结构内部有一个指向另一个名为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)的定义,我找不到它的功能。它使用这些参数调用结构
struct2
的函数Func()
函数Func()
是指向函数的指针,是组成函数的指令启动的指针(内存地址)
有关解释,请参阅
指针是一个变量,必须在用于调用之前进行设置。它使用这些参数调用结构struct2
的函数Func()
函数Func()
是指向函数的指针,是组成函数的指令启动的指针(内存地址)
有关解释,请参阅
指针是一个变量,必须在用于调用之前进行设置。您所称的“函数的一些原型,包括Func(param)
”是一个变量。您可以调用指针指向的函数,就像指针表示该函数的名称一样。最内部的结构已设置为指向某个函数的指针;您的代码段通过其指针调用该函数
下面是一个简短的示例,说明了这是如何工作的():
#包括
类型定义结构{
无效(*func)(int);
}与_fp;
无效测试(int n){
printf(“测试%d\n”,n);
}
内部主(空){
与_fp s={.func=test};
使用_fp*ptr=&s;
ptr->func(123);
返回0;
}
您所说的“函数的一些原型,包括Func(param)
”是一个很好的例子。您可以调用指针指向的函数,就像指针表示该函数的名称一样。最内部的结构已设置为指向某个函数的指针;您的代码段通过其指针调用该函数
下面是一个简短的示例,说明了这是如何工作的():
#包括
类型定义结构{
无效(*func)(int);
}与_fp;
无效测试(int n){
printf(“测试%d\n”,n);
}
内部主(空){
与_fp s={.func=test};
使用_fp*ptr=&s;
ptr->func(123);
返回0;
}
这有帮助吗?显示你所关心的代码,不要试图用散文来描述它。我认为这个问题不应该被封闭得过于本地化:通过在一个代码<结构> <代码>中嵌入的函数指针调用函数的语法真的很混乱,尤其是如果你熟悉C++的话。这有帮助吗?显示你有问题的代码,不要试图用散文来描述它。我认为这个问题不应该被封闭得过于本地化:通过在一个代码<结构> <代码>中嵌入的函数指针调用函数的语法真的很混乱,尤其是如果你熟悉C++的“成员函数”。这标签是“C”,我知道。它类似于“成员变量”,虽然不是从C++中知道的成员函数,但是它使他更容易理解这个概念。@关于H2CO3的关于C++的其他问题都被标记为“C”。@ H2CO3如果C++问题被标记为C,则编辑并重新标记,不要把它当作是关于C。在这种情况下,我们不清楚问题是什么,因为我们没有看到代码。@ N.M从问题的文本中,不能决定它是关于C还是C++的——两种语言对于两个不同的任务都有相同的语法。所以我假设这个问题没有被误解,这就是为什么我认为“成员函数”这个术语是不准确的。“成员函数”?这标签是“C”,我知道。它类似于“成员变量”,虽然不是从C++中知道的成员函数,但是它使他更容易理解这个概念。@关于H2CO3的关于C++的其他问题都被标记为“C”。@ H2CO3如果C++问题被标记为C,则编辑并重新标记,不要把它当作是关于C。在这种情况下,我们不清楚问题是什么,因为我们没有看到代码。@ N.M从问题的文本中,不能决定它是关于C还是C++的——两种语言对于两个不同的任务都有相同的语法。所以我假设这个问题没有错,这就是为什么我认为“成员函数”这个术语不准确。有没有理由对这个答案投反对票?有没有理由对这个答案投反对票?
#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;
}