如何初始化结构数组成员用C
我有以下结构:如何初始化结构数组成员用C
typedef struct {
int someArray[3][2];
int someVar;
} myStruct;
如果我创建这个结构在我的主数组(像下面),我将如何初始化呢?
int main() {
myStruct foo[5];
}
我想初始化结构体的方式在上述阵列类似于initilazing正常阵列(见下面):
int main() {
int someArray[5] = {1,4,0,8,2};
}
从外面工作的你知道你有5件事情的数组初始化:
mystruct foo[5] = {
X,
X,
X,
X,
X
};
其中X
是一台为mystruct
类型的初始化。所以现在我们需要弄清楚每个X
的样子。的mystruct
每个实例有两个元素,somearray
和somevar
,所以你知道你的X
初始化会像
X = { Y, Z }
代回原来的声明中被结构化的,我们现在得到
mystruct foo[5] = {
{ Y, Z },
{ Y, Z },
{ Y, Z },
{ Y, Z },
{ Y, Z }
};
现在,我们需要弄清楚每个Y的样子。 Y对应于int
的3x2阵列的初始化器。再次,我们可以在从外部的工作,你有一个3元素数组的初始化:
Y = { A, A, A }
,其中每个阵列元素是int
一个2元素的数组:
A = { I, I }
Subsituting回为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
秒,你就大功告成了:
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}
};
+1:很好的呈现。 – 2012-03-12 18:14:46
喜欢的是:
int main() {
// someArr initialization | someVar initialization
mystruct foo[5] = { { { {1, 2}, {1,2}, {1, 2} }, 1 }, // foo[0] initialization
//...
};
}
裹初始化对于一组花括号中的每个结构元素:
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 },
};
。
我想你可能错过了第二行的'{'。这与你的回答是一样的 – 2012-03-12 15:11:43
@BinyaminSharet:GCC对代码感到满意。在每条数据线上都有一组平衡的开放和关闭的大括号,在数据行前后的行的起始处使用周围的“{”和“};”。 – 2012-03-12 15:17:31
的确,我错过了第一个'{'抱歉。 – MByD 2012-03-12 15:17:40
只是因为一些事情可以做,并不一定意味着你应该做他们。考虑一下从未看过你的代码的人会如何看待这样的初始化。 – 2012-03-12 14:47:57
@HunterMcMillen - 在许多情况下,这是比别人更好的选择。 – MByD 2012-03-12 14:57:21
@BinyaminSharet我只是相信在维护方面,初始化每一部分清楚地评论每一步会更加清楚。你可以举一个例子,这是首选吗?没有人想到我。 – 2012-03-12 15:03:56