【问题标题】:Array declaration and initialization with structs数组声明和结构初始化
【发布时间】:2013-10-06 20:07:04
【问题描述】:

我正在尝试声明一个structs 的数组,是否可以将所有数组条目初始化为默认的struct 值?

例如,如果我的struct 类似于

           typedef struct node
           {    int data;
                struct node* next;
           }node;

有没有办法向4null 旁边声明数据? 0null 呢?

【问题讨论】:

  • 如果您的意思是“int data = 4;”,答案是否定的。不在 C.stackoverflow.com/questions/13716913/…
  • 好的,如果不可能,我将如何检查下一个是否为空?只是一个简单的 NULL 检查还是什么?
  • 全零和全空都可以。节点 foo[100] = { 0 } ;

标签: c


【解决方案1】:

当然:

node x[4] = { {0, NULL}, {1, NULL}, {2, NULL}, {3, NULL} };

即使这样也应该没问题:

node y[4] = { {0, y + 1}, {1, y + 2}, {2, y + 3}, {3, NULL} };

【讨论】:

  • 但是如果我的数组中有 100,000 个条目怎么办?有没有更有效的方法?
  • 对于 100,000 个条目,您可能会从持久存储初始化,因此效率不会成为问题,因为性能会受到 io 限制。在我看来,Kerrek SB 的回答是“最有可能是最好的解决方案”,因此得到了 +1。
  • @Bathsheba +1 我同意。没有办法通过一些神奇的声明来初始化一个将 ad-nausem 增加到某个声明的上限的序列。即使是一个固定的普通数组,int ar[N] 也有同样的限制。该结构不会增加从根本上不可能开始的额外复杂性。
  • 那么如果我有一个节点数组并且我检查数组索引是否为空会发生什么?
  • @PaulthePirate:关于 100000 个条目:如果你真的想初始化它们,那么你必须拼出初始化器。如果您乐于在初始化后分配值,您可以在一个简单的循环中完成。 (不过,在 C++ 中,您可以使用模板来生成紧凑的初始化程序。)
猜你喜欢
  • 2018-05-20
  • 2019-11-26
  • 2021-12-31
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多