为什么在初始化此结构时需要更多大括号?

时间:2014-11-04 12:56:31

标签: c struct

起初我尝试初始化这样的结构:

struct {
    char age[2];        // Hold two 1-Byte ages
} studage[] = {
    {23, 56},
    {44, 26}
};

但是这给了我关于缺少大括号的编译器警告,所以我使用了编译器建议的更多大括号,最后得到了这个:

struct {
    char age[2];        // Hold two 1-Byte ages
} studage[] = {
    {{23, 56}},
    {{44, 26}}
};

没有警告。为什么我需要额外的括号?

1 个答案:

答案 0 :(得分:10)

你有一个结构数组,结构有一个成员,它是一个数组。

struct {
    char age[2];        // Hold two 1-Byte ages
} studage[] = {
              ^ 
         This is for the studage array
    { { 23, 56}},
    ^ ^ 
    | this is for the age array
  this is for the anonymous struct

    {{44, 26}}
};

也许更容易看出你的结构是否有另一个成员:

struct {
        int id;
        char age[2];
    } studage[] = {
        {1, {23, 56}},
         ^   ^    ^
         id  |    | 
           age[0] |
                 age[1]
     };