如何在C中初始化struct数组的成员

我有以下结构:

typedef struct { int someArray[3][2]; int someVar; } myStruct; 

如果我在main中创建这个结构的数组(如下所示),我将如何初始化它?

 int main() { myStruct foo[5]; } 

我想以类似于初始化普通数组的方式初始化上面的struct数组(见下文):

 int main() { int someArray[5] = {1,4,0,8,2}; } 

从外面开始工作。你知道你有5个要初始化的数组:

 mystruct foo[5] = { X, X, X, X, X }; 

其中Xmystruct类型的初始值设定项的mystruct 。 所以现在我们需要弄清楚每个X样子。 mystruct每个实例都有两个元素, somearraysomevar ,所以你知道你的X初始化器的结构是这样的

 X = { Y, Z } 

替换回原始声明,我们现在得到

 mystruct foo[5] = { { Y, Z }, { Y, Z }, { Y, Z }, { Y, Z }, { Y, Z } }; 

现在我们需要弄清楚每个Y的样子。 Y对应于3×2 int数组的初始值设定项。 同样,我们可以从外部工作。你有一个3元素数组的初始化器:

 Y = { A, A, A } 

其中每个数组元素是一个2元素的int数组:

 A = { I, I } 

回到Y,我们得到

 Y = { { I, I }, { I, I }, { I, I } } 

把它替换回X,我们得到了

 X = { { { I, I }, { I, I }, { I, I } }, Z } 

现在给了我们

 mystruct foo[5] = { { { { I, I }, { I, I }, { I, I } }, Z }, { { { I, I }, { I, I }, { I, I } }, Z }, { { { I, I }, { I, I }, { I, I } }, Z }, { { { I, I }, { I, I }, { I, I } }, Z }, { { { I, I }, { I, I }, { I, I } }, Z } }; 

由于Z是整数的替代,我们不需要进一步细分。 只需用实际的整数值替换I s和Z s,就完成了:

 mystruct foo[5] = { {{{101, 102}, {201, 202}, {301, 302}}, 41}, {{{111, 112}, {211, 212}, {311, 312}}, 42}, {{{121, 122}, {221, 222}, {321, 322}}, 43}, {{{131, 132}, {231, 232}, {331, 332}}, 44}, {{{141, 142}, {241, 242}, {341, 342}}, 45} }; 

在一组大括号中为数组的每个结构元素包装初始值设定项:

 myStruct foo[5] = { { { { 11, 12 }, { 13, 14 }, { 55, 56 }, }, 70 }, { { { 21, 22 }, { 23, 24 }, { 45, 66 }, }, 71 }, { { { 31, 32 }, { 33, 34 }, { 35, 76 }, }, 72 }, { { { 41, 42 }, { 43, 44 }, { 25, 86 }, }, 73 }, { { { 51, 52 }, { 53, 54 }, { 15, 96 }, }, 74 }, }; 

像那样:

 int main() { // someArr initialization | someVar initialization mystruct foo[5] = { { { {1, 2}, {1,2}, {1, 2} }, 1 }, // foo[0] initialization //... }; }