Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从结构调用函数_C++_C_Structure - Fatal编程技术网

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); }