C: typedef 结构中的函数指针

标签 c struct linked-list function-pointers typedef

我试图在 C 中创建一个链表,但试图将它很好地打包成某种 C++ 风格的类。我在 C 中使用函数指针时遇到了一些问题。

typedef struct linkedList {
    int count;
    struct msgNode *front;
    struct msgNode *back;
    void (*addMSG)(unsigned char *, int, struct linkedList *);
} msgList;

void addMSG(unsigned char *data, int size, struct linkedList *self);

理想情况下,我希望它可以让您列出然后添加您可以简单地调用结构中的“方法”(函数),模拟您在 C++ 中看到的行为。

目前我在调用 addMSG 时遇到段错误,这当然是因为 addMSG 没有指向函数。但是,我不想在每次使用链表时都指定一个函数来指向它。有没有什么好的方法可以让函数指针不必隐式指向函数,或者您是否必须隐式地将它指向函数?

这只是此处显示的部分实现。最后,这个结构将拥有所有必要的功能。这只是为了让这个问题简明扼要。

最佳答案

您需要将功能分配给成员。我还建议给他们不同的名字:

typedef void (*addMSGFunc)(unsigned char *, int, struct linkedList *);

typedef struct linkedList {
    int count;
    struct msgNode *front;
    struct msgNode *back;
    addMSGFunc addMSG;
} msgList;

void addMSGImpl(unsigned char *data, int size, struct linkedList *self)
{
    ...
}

然后在创建一个 msgList 之后:

msgList myList;
myList.addMSG = addMSGImpl;

关于C: typedef 结构中的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19039014/

相关文章:

c - 链表删除位置 N 的节点

c - C 编程的 IDE?

c - 打印指针到指针

mongodb - 从处理程序中插入MongoDB文档

arrays - 追加到结构内的结构数组

c++ - 链表类

c - 使用 winsock 发送结构

c - while(1) .. break 而不是 goto

c - clock_t、time_t 和 struct tm 有什么区别?

c - C 中的链接列表插入放置功能出现问题。