c++ - 存储结构的动态数组

标签 c++ c arrays pointers struct

我一直在从事一个使用动态结构数组的项目。为了避免将结构的数量存储在它自己的变量中(结构的计数),我一直在使用一个指向结构变量的指针数组,并使用 NULL 终止符。

例如,假设我的结构类型定义为:

typedef struct structure_item{
    /* ... Structure Variables Here ... */
} item_t;

现在假设我的代码有 item_t **allItems = { item_1, item_2, item_3, ..., item_n, NULL }; 并且所有 item_# 都是item_t * 类型。

使用此设置,我就不必跟踪另一个告诉我项目总数的变量。相反,我可以通过以下方式确定所需的项目总数:

int numberOfStructures;
for( numberOfStructures = 0;
     *(allItems + numberOfStructures) != NULL;
     numberOfStructures++
  );

当这段代码执行时,它会计算NULL之前的指针总数。

作为对比,这个系统类似于C风格的字符串;而跟踪结构总数类似于 Pascal 风格的字符串。 (因为 C 使用以 NULL 结尾的字符数组,而 Pascal 跟踪其字符数组的长度。)

我的问题很简单,指针数组(指向结构的指针)是否真的有必要,或者这可以用结构数组(指向结构的指针)来完成吗?谁能提供更好的方法来处理这个问题?

注意:解决方案与 C C++ 兼容很重要。这被用在一个包装器库中,该库正在包装一个 C++ 库以在标准 C 中使用。

提前谢谢大家!

最佳答案

您需要的是一个标记值,一个可识别的有效值,表示“无”。对于指针,标准标记值是 NULL

如果你想直接使用你的结构,你需要决定一个 item_t 类型的标记值,并检查它。你来电。

关于c++ - 存储结构的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28256823/

相关文章:

arrays - Flash 跟踪、转储、打印数组变量

javascript - 在 extjs 中向 json 对象添加一个数组

c++ - 不确定在哪里定义和声明我的结构。 (获取未声明的标识符)

自定义系统调用可以访问另一个进程的内存吗?

c++ - QT:QTimeEdit 小部件中 'Up' 和 'Down' 箭头的事件

c - 如何测试我的应用程序是否兼容 UNICODE?

c - 如何在 C/C++ 中从空格分隔的整数获取输入?

python - 初始化未知长度的numpy数组

c++ - C++ 中字符串类型的枚举类

c++ - Visual Studio 2015 重复构建时卡住整个 PC