我正在开发一个可以被其他 C 程序使用的共享库(又名 dll)实现。作为数据契约,我希望能够从我的方法之一返回可变长度的列表。比如说,我希望返回的结构是 my_data_type
,我应该将什么作为合约数据结构?
我可以想到这样的事情:
struct data_type_list
{
my_data_type* data_list;
int count;
};
消费者知道列表中有 count
个元素,并且消费者在 data_list[count-1]
处终止数组。
还有其他想法吗?
最佳答案
这实际上取决于您的图书馆的用户如何利用返回的数据。如果数据几乎是只读的(从某种意义上说,用户不想写入它,而只是迭代 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 成员(产生双向链表)。
关于c - 返回一个列表作为数据结构契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258906/