在 C 中初始化包含函数指针的结构

用户2709168

结构体box定义box.h如下:

typedef struct box {
    int (*func1) (const void *p1, const void *p2);
    void (*func2) (void *p3);
} Box;

box.c包括box.h并具有以下功能:

int create_box(int (*func1)(const void *p1, const void *p2), void (*func2)(const void *p3), Box **box) {

create_box被调用以根据提供的参数初始化一个框。我正在努力弄清楚如何将提供的函数指针分配给结构的字段。首先,我首先将内存分配给**boxvia(*box) = malloc(sizeof(Box));

但是后来我尝试通过分配函数指针的参数

(*box)->func1 = (func1)(&p1, &p2);
(*box)->func2 = (func2)(&p3);

运行这个告诉我我所有的指针都是未声明的。显然,我对函数指针的工作方式有些误解,但我不明白我应该如何初始化它们(如果这是写字的话)。我试着更换右侧(*func1)(*p1, *p2)(func1)(p1, p2)(*func1)(p1, p2)(*func1)(&p1, &p2),等但他们没有得到任何东西,我能理解。如何正确初始化此结构的函数指针?

如果相关,我正在 C90 中工作。

布鲁诺

如果我很好理解

(*box)->func1 = (func1)(&p1, &p2);
(*box)->func2 = (func2)(&p3);

int create_box(int (*func1)(const void *p1, const void *p2), void (*func2)(const void *p3), Box **box) {所以你想要:

(*box)->func1 = func1;
(*box)->func2 = func2;

该表单(func1)(&p1, &p2);调用地址在func1 中的函数,参数中p1p2的地址func1周围的“()”没有用),这显然不是您想要的,因为p1p2没有定义。

但是,(*box)->func2 = func2;不可能与您现有的代码,因为签名(*box)->func2func2不对应。您可以将第二个参数更改create_boxvoid (*func2)( void *p3)或修改结构框以具有void (*func2) (const void *);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章