簡體   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