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

时间:2012-03-12 14:43:13

标签: c

我有以下结构:

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};
}

3 个答案:

答案 0 :(得分:25)

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

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

其中Xmystruct类型的初始值设定项的替身。所以现在我们需要弄清楚每个X的样子。 mystruct的每个实例都有两个元素,somearraysomevar,因此您知道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 }

回到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是整数的替代,我们不需要进一步细分。只需将IZ替换为实际的整数值,即可完成:

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 :(得分:3)

将数组的每个结构元素的初始化程序包装在一组大括号中:

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 },
};

答案 2 :(得分:0)

就像那样:

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