C++ 从结构调用函数
我有以下代码。我只想知道代码最后一行的意思C++ 从结构调用函数,c++,c,structure,C++,C,Structure,我有以下代码。我只想知道代码最后一行的意思 typedef struct Details { int D1; int D2; } Sdetails; typedef struct Variable { int Type; Sdetails i; }Varialbl3; typedef XAN_BOOL (*returnfunction)(variabl3* Data); typedef struct _function { retur
typedef struct Details
{
int D1;
int D2;
} Sdetails;
typedef struct Variable
{
int Type;
Sdetails i;
}Varialbl3;
typedef XAN_BOOL (*returnfunction)(variabl3* Data);
typedef struct _function
{
returnfunction fr;
}function1;
function1 *f1;
variabl3 v3;
f1->fr(&v3);
最后一行f1->fr(&v3)表示什么?我不明白这个概念
f1
是指向结构的指针。结构有一个名为fr
的成员,它是指向函数的指针。该函数获取指向variabl3
的指针,并返回XAN\u BOOL
因此,
f1->fr(&v3)
调用由f1->fr
指向的函数,提供v3
的地址作为唯一参数,并忽略返回值。f1是一个指针,是一种结构;该结构的唯一成员是指向函数的指针。最后一行调用该结构实例中指针持有的函数,并将variable3
结构实例的地址作为函数的参数传递。它调用fr
函数
f1
是指向function1
(结构)的指针:
function1
有成员-指向函数的指针-名为fr
。函数,指针由fr
获取一个参数-variabl3
:
// pointer to function, taking one argument with type
// `variabl3` and returns typedef struct _function
typedef XAN_BOOL (*returnfunction)(variabl3* Data);
因此,
f1->fr(&v3)
调用fr
,并将v3
作为参数传递。返回值为XAN_BOOL
,如typedef中所述
顺便说一句,如果这是真正的代码-这是未定义的行为,因为
f1
是未初始化的它是函数上的指针:基本上,您正在调用一个可以在其他地方设置的抽象函数
你应该在某个地方有一个真正的函数,比如:
XAN_BOOL realFunction(variabl3* pxData) { return (pxData==0); }
然后可以执行:f1->fr=realFunction
:使函数指针指向实函数。然后,当您在之后调用f1->fr时,它将调用realFunction
这在许多设计模式中被广泛使用:当您想要注册回调时,在侦听器/触发器中,当您想要在纯C中实现面向对象的设计时,当您想要执行UI时(例如,在GTK中,您将行为附加到按钮)
希望这有帮助,如果有任何不清楚的地方,请在评论中询问,我会编辑
XAN_BOOL realFunction(variabl3* pxData) { return (pxData==0); }