【问题标题】:Initializing a struct containing function pointers in C在 C 中初始化包含函数指针的结构
【发布时间】:2019-05-02 15:49:38
【问题描述】:

结构体boxbox.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 被调用以根据提供的参数初始化一个框。我正在努力弄清楚如何将提供的函数指针分配给结构的字段。首先,我首先通过(*box) = malloc(sizeof(Box));**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;?
  • 请注意,不需要类型声明中的p1p2。我的意思是int (*func1)(const void*p1, const void *p2)int (*func1)(const void*, const void *) 相同。

标签: c struct function-pointers c89


【解决方案1】:

如果我很好理解

(*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) 或将struct box 修改为void (*func2) (const void *);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多