C - 初始化包含多个数组的二维全局静态结构数组

时间:2016-08-29 09:26:17

标签: c arrays struct initialization ini

我想初始化一个包含数组的二维全局静态结构数组。 以下似乎不起作用。

struct MyStuct{
    int a;
    int b;
    int c[2];
    int d[2];
};
STATIC MyStuct[2][3] = {
{{1,1,{1,1},{1,1}},
{2,2,{2,2},{2,2}},
{3,3,{3,3},{3,3}}},
{{7,7,{7,7},{7,7}},
{8,8,{8,8},{8,8}},
{9,9,{9,9},{9,9}}}
};

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:1)

struct MyStuct{
    int a;
    int b;
    int c[2];
    int d[2];
};

static struct MyStuct test [2][3] =
{
//            |     COL 0     |  |     COL 1     |  |    COL 2      |
/* ROW 0 */ { {1,1,{1,1},{1,1}}, {2,2,{2,2},{2,2}}, {3,3,{3,3},{3,3}} },
/* ROW 1 */ { {7,7,{7,7},{7,7}}, {8,8,{8,8},{8,8}}, {9,9,{9,9},{9,9}} }
};

您的矩阵声明必须使用结构作为类型,即struct MyStuct test

仅供测试:

#include <stdio.h>

int main (void)
{
    struct MyStuct{
        int a;
        int b;
        int c[2];
        int d[2];
    };

    struct MyStuct test [2][3] =
    {
    //            |     COL 0      |       COL 1       |      COL 2        |
    /* ROW 0 */ { {1,1,{1,1},{1,1}}, {2,2,{2,2},{2,2}}, {3,3,{3,3},{3,3}} },
    /* ROW 1 */ { {7,7,{7,7},{7,7}}, {8,8,{8,8},{8,8}}, {9,9,{9,9},{9,9}} }
    };

    for (size_t i=0; i< 2; i++)
    {
        for (size_t j=0; j<3; j++)
        {
            printf("test[%zu][%zu].a = %d\n", i, j, test[i][j].a);
            printf("test[%zu][%zu].b = %d\n", i, j, test[i][j].b);

            for (size_t z=0; z<sizeof(test[i][j].c)/sizeof(test[i][j].c[0]); z++)
            {
                printf("test[%zu][%zu].c[%zu] = %d\n", i, j, z, test[i][j].c[z]);
            }

            for (size_t z=0; z<sizeof(test[i][j].c)/sizeof(test[i][j].c[0]); z++)
            {
                printf("test[%zu][%zu].d[%zu] = %d\n", i, j, z, test[i][j].c[z]);
            }

            printf("\n");
        }
    }

    return 0;
}

答案 1 :(得分:0)

您只需要以适当的方式声明2D静态全局数组, 即,

struct MyStuct{
    int a;
    int b;
    int c[2];
    int d[2];
};
static MyStuct arrayName[2][3] = {
    { { 1, 1, { 1 ,1 }, { 1, 1 } },
    { 2, 2, { 2, 2 }, { 2, 2 } },
    { 3, 3, { 3, 3 }, { 3, 3 } } },
    { { 7, 7, { 7, 7 }, { 7, 7 } },
    { 8, 8, { 8, 8 }, { 8, 8 } },
    { 9, 9, { 9, 9 }, { 9, 9 } } }
};

上面的代码工作正常。你可以查看这个