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

在C中初始化包含函数指针的结构,c,struct,function-pointers,c89,C,Struct,Function Pointers,C89,结构框在box.h中定义如下: 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=mallocsizeofBox将内存分配给**box 但是我尝试通过指定函数指针的参

结构框在box.h中定义如下:

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=mallocsizeofBox将内存分配给**box

但是我尝试通过指定函数指针的参数

(*box)->func1 = (func1)(&p1, &p2);
(*box)->func2 = (func2)(&p3);
运行这个命令告诉我,我所有的指针都是未声明的。很明显,我对函数指针的工作原理有一些误解,但我不明白如果是写的话,我应该如何初始化它们。我尝试过用*func1*p1、*p2、func1p1、p2、*func1p1、p2、*func1&p1和p2等替换右侧,但它们没有产生任何我能理解的结果。如何正确初始化此结构的函数指针

如果相关的话,我在C90工作。

如果我理解的话

(*box)->func1 = (func1)(&p1, &p2);
(*box)->func2 = (func2)(&p3);
在int create_boxint*func1const void*p1,const void*p2,void*func2const void*p3,Box**Box{所以您想要:

(*box)->func1 = func1;
(*box)->func2 = func2;
形式func1&p1,&p2;调用的函数的地址在func1中,而在围绕func1的参数中,地址为p1和p2的函数是无用的,这显然不是您想要的,也不是您可以做的,因为p1和p2没有定义

但是当前代码不可能使用*box->func2=func2;,因为*box->func2和func2的签名不对应。您可以将create_box的第二个参数更改为void*func2 void*p3,或者将结构框修改为void*func2 const void*;

可能是*box->func1=func1;?注意类型声明中的p1和p2不是空的需要。我的意思是int*func1const void*p1,const void*p2与int*func1const void*,const void*相同。
(*box)->func1 = func1;
(*box)->func2 = func2;