从结构中调用函数

时间:2011-06-09 05:11:35

标签: 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
{
    returnfunction          fr;

}function1;


function1 *f1;
variabl3  v3;

f1->fr(&v3);

最后一行f1-> fr(& v3)表示什么?我不明白这个概念。

4 个答案:

答案 0 :(得分:4)

f1是指向结构的指针。该struct有一个名为fr的成员,它是一个指向函数的指针。该函数使用指针variabl3并返回XAN_BOOL

因此,f1->fr(&v3)调用f1->fr指向的函数,提供v3的地址作为唯一参数,并忽略返回值。

答案 1 :(得分:2)

它调用fr函数。

f1是指向function1(结构)的指针:

typedef struct _function
{
    returnfunction          fr;
}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 未初始化

答案 2 :(得分:1)

f1是指针的一种结构; struct的唯一成员是指向函数的指针。最后一行调用指针在该结构的实例中持有的函数,并将variable3结构的实例的地址作为函数的参数传递。

答案 3 :(得分:0)

它是一个函数的指针:基本上,你正在调用一个可以在其他地方设置的抽象函数。

你应该有一个真正的功能,如:

XAN_BOOL realFunction(variabl3* pxData) { return (pxData==0); }

然后你可以这样做:f1->fr = realFunction:你的函数指针指向真实函数。然后,当你调用f1-> fr之后,它将调用realFunction。

这在很多设计模式中被广泛使用:当你想要在监听器/触发器中注册回调时,当你想在纯C中实现面向对象的设计时,当你想要eract到UI时(你附加一个行为到按钮,例如在GTK中。)

希望这有助于,如果有任何不清楚的地方,请在评论中提问,我会编辑。