c - 将列表作为数据结构合约返回
问题描述
我正在开发一个可以被其他 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
指向前一个节点的成员(产生一个双向链表)。
推荐阅读
- php - 嵌套 GNU Parallel 处理多个大文件并将每个文件数据拆分为队列处理
- c# - 动态、变量和对象之间的区别
- java - 在 2 个映射之间获取具有 2 个键的值
- javascript - 在 React 中安装组件时包含谷歌地图脚本
- c - MPI Scatter / 向进程发送数据
- ios - 保存在文档库中的图像文件无法在计算机 Objective-C 中打开
- c# - 指定格式时 DateTime 解析不起作用
- google-sheets - 每隔 n 行着色一次
- javascript - 将变量作为具有相同字符串的索引传递将不起作用
- php - PHP / Laravel Firebase 实时数据库更新特定字段