首页 > 解决方案 > 将列表作为数据结构合约返回

问题描述

我正在开发一个可以被其他 C 程序使用的共享库(又名 dll)实现。作为数据合同,我希望能够从我的一种方法中返回一个可变长度的列表。说,我希望返回的结构是my_data_type,我应该把什么作为合同数据结构?

我可以想到这样的事情:

struct data_type_list
{
    my_data_type* data_list;
    int count;
};

消费者知道列表中有count元素并且消费者在 处终止数组data_list[count-1]

还有其他想法吗?

标签: cdata-structuresshared-libraries

解决方案


这实际上取决于您的图书馆的用户如何利用返回的数据。如果数据几乎是只读的,我可能会选择您的解决方案(从某种意义上说,用户不想写入它,而只是遍历 指向的每个元素data_type_list.data_list)。如果用户想要进行广泛的修改,例如添加或删除数据,那么链表将是首选的数据结构,我认为:

/* example of a node in a singly-linked list */
struct list_node {
    void *data;
    struct list_node *next;
}

指针指示列表的NULL结尾,而可以使用data每个节点的成员访问数据。当然,您也可以添加一个struct list_node *prev指向前一个节点的成员(产生一个双向链表)。


推荐阅读