繁体   English   中英

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

[英]Initializing a struct containing function pointers in C

struct boxbox.h box定义如下:

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来初始化一个框。 我正在努力弄清楚如何将提供的函数指针分配给结构的字段。 首先,我首先通过(*box) = malloc(sizeof(Box));将内存分配给**box (*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_box的第二个参数更改为void (*func2)( void *p3)或将结构框修改为具有void (*func2) (const void *);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM