初始化结构数组,其中数组作为c中结构的元素

时间:2015-02-24 00:03:48

标签: c arrays struct init

我的结构定义如下:

typedef struct simpleStruct {
    int a[2];
    int b;
    int c;
} simpleStruct;

我正在尝试使用以下内容对其进行初始化:

simpleStruct simpleTable[] = {
    {.a[0]= 0, .a[1]= 1, .b = 2, .c = 3},
    {.a[0]= 4, .a[1]= 5, .b = 6, .c = 7},
};

编译器正在进行非法初始化'错误。

根据C99规范,应该允许通过指定初始化器(http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html

我已经尝试了其他几种初始化方法,并发现这有效:

simpleStruct simpleTable[] = {
    {.a = {0,1}, .b = 2, .c = 3},
    {.a = {4,5}, .b = 6, .c = 7},
};

我想知道是否有人对第一个版本无效的原因有任何见解。

感谢。

2 个答案:

答案 0 :(得分:0)

这看起来像编译器中的错误。初始化器是正确的,每个C标准允许多个嵌套指示符。在6.7.9最新版本的初始化中有一个例子:

示例11当未经修饰的初始化列表可能被误解时,可以使用指示符提供显式初始化:

  struct { int a[3], b; } w[] =
        { [0].a = {1}, [1].a[0] = 2 };

答案 1 :(得分:0)

Everything seems fine to me

    #include<stdio.h>

    typedef struct simpleStruct {
        int a[2];
        int b;
        int c;
    } simpleStruct;

    int main()
    {
        simpleStruct anObj[]={{{23,30},40,39},{{20,90},20,19}};
        printf("%d, %d, %d, %d\n", anObj[0].a[0], anObj[0].a[1], anObj[0].b, anObj[0].c);
        printf("%d, %d, %d, %d\n", anObj[1].a[0], anObj[1].a[1], anObj[1].b, anObj[1].c);
        return 0;
    }