C 使用结构进行数组声明和初始化

C 使用结构进行数组声明和初始化,c,C,我正试图声明一个struct数组,是否可以将所有数组项初始化为默认的struct值 例如,如果我的struct类似 typedef struct node { int data; struct node* next; }node; 是否有方法将数据声明到4和null旁边?那么0和null呢?当然: node x[4] = { {0, NULL}, {1, NULL}, {2, NULL},

我正试图声明一个
struct
数组,是否可以将所有数组项初始化为默认的
struct

例如,如果我的
struct
类似

           typedef struct node
           {    int data;
                struct node* next;
           }node;
是否有方法将数据声明到
4
null
旁边?那么
0
null
呢?

当然:

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} };
当然可以:

即使这样也可以:

node y[4] = { {0, y + 1}, {1, y + 2}, {2, y + 3}, {3, NULL} };
当然可以:

即使这样也可以:

node y[4] = { {0, y + 1}, {1, y + 2}, {2, y + 3}, {3, NULL} };
当然可以:

即使这样也可以:

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


但是如果我的数组中有100000个条目呢?有没有更有效的方法?对于100000个条目,您可能会从持久性存储中初始化,这样效率就不会成为问题,因为性能会受到io限制。Kerrek SB的答案在我看来是“最有可能的最佳解决方案”,所以得到+1。@Bathsheba+1我同意。没有办法通过一些神奇的声明来初始化一个序列,该序列将ad nausem增加到某个声明的上限。即使是一个固定的普通数组,
intar[N]
也有相同的限制。这种结构并没有给一开始就根本不可能做到的事情增加额外的复杂性。那么,如果我有一个节点数组,并且我检查数组索引是否为空,会发生什么呢?@PaulthePirate:Re 100000个条目:如果你真的想初始化它们,那么你必须拼出初始值设定项。如果您愿意在初始化后分配值,可以在一个简单的循环中完成。(C++中,你可以使用模板来生成紧凑的初始化器)但是如果我的数组中有100000个条目呢?有没有更有效的方法?对于100000个条目,您可能会从持久性存储中初始化,这样效率就不会成为问题,因为性能会受到io限制。Kerrek SB的答案在我看来是“最有可能的最佳解决方案”,所以得到+1。@Bathsheba+1我同意。没有办法通过一些神奇的声明来初始化一个序列,该序列将ad nausem增加到某个声明的上限。即使是一个固定的普通数组,
intar[N]
也有相同的限制。这种结构并没有给一开始就根本不可能做到的事情增加额外的复杂性。那么,如果我有一个节点数组,并且我检查数组索引是否为空,会发生什么呢?@PaulthePirate:Re 100000个条目:如果你真的想初始化它们,那么你必须拼出初始值设定项。如果您愿意在初始化后分配值,可以在一个简单的循环中完成。(C++中,你可以使用模板来生成紧凑的初始化器)但是如果我的数组中有100000个条目呢?有没有更有效的方法?对于100000个条目,您可能会从持久性存储中初始化,这样效率就不会成为问题,因为性能会受到io限制。Kerrek SB的答案在我看来是“最有可能的最佳解决方案”,所以得到+1。@Bathsheba+1我同意。没有办法通过一些神奇的声明来初始化一个序列,该序列将ad nausem增加到某个声明的上限。即使是一个固定的普通数组,
intar[N]
也有相同的限制。这种结构并没有给一开始就根本不可能做到的事情增加额外的复杂性。那么,如果我有一个节点数组,并且我检查数组索引是否为空,会发生什么呢?@PaulthePirate:Re 100000个条目:如果你真的想初始化它们,那么你必须拼出初始值设定项。如果您愿意在初始化后分配值,可以在一个简单的循环中完成。(C++中,你可以使用模板来生成紧凑的初始化器)但是如果我的数组中有100000个条目呢?有没有更有效的方法?对于100000个条目,您可能会从持久性存储中初始化,这样效率就不会成为问题,因为性能会受到io限制。Kerrek SB的答案在我看来是“最有可能的最佳解决方案”,所以得到+1。@Bathsheba+1我同意。没有办法通过一些神奇的声明来初始化一个序列,该序列将ad nausem增加到某个声明的上限。即使是一个固定的普通数组,
intar[N]
也有相同的限制。这种结构并没有给一开始就根本不可能做到的事情增加额外的复杂性。那么,如果我有一个节点数组,并且我检查数组索引是否为空,会发生什么呢?@PaulthePirate:Re 100000个条目:如果你真的想初始化它们,那么你必须拼出初始值设定项。如果您愿意在初始化后分配值,可以在一个简单的循环中完成。(C++中,你可以使用模板来生成紧凑的初始化器)。如果你的意思是“int data=4”,答案是否定的,而不是在C中。那么,如果不可能,我如何检查下一个是空的吗?只是一个简单的空值检查还是什么?所有的零和空值都可以。节点foo[100]={0};如果你的意思是“int data=4;”,答案是否定的。不是C。好的,那么如果不可能,我如何检查next是否为空?只是一个简单的空值检查还是什么?所有的零和空值都可以。节点foo[100]={0};如果你的意思是“int data=4;”,答案是否定的。不是C。好的,那么如果不可能,我如何检查next是否为空?只是一个简单的空值检查还是什么?所有的零和空值都可以。节点foo[100]={0};如果你的意思是“int data=4;”,答案是否定的。不是C。好的,那么如果不可能,我如何检查next是否为空?只是一个简单的空值检查还是什么?所有的零和空值都可以。节点foo[100]={0};