结构硬编码初始化中的C结构

杰西卡·科恩(Jessica Cohen)

我在这里为C99做错了什么:

struct chess {
    struct coordinate {
        char piece;
        int alive;
    } pos[3];
}table[3] =
{
    {
      {'Q', (int)1},{'Q', (int)1},{'Q', (int)1},
      {'B', (int)1},{'B', (int)1},{'B', (int)1},
      {'K', (int)1},{'K', (int)1},{'K', (int)1},
    }
};

它给出了错误:

error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token

我希望能够像在一个结构中拥有一个结构那样来访问数据:

table[row].pos[column].piece
table[row].pos[column].alive

我尝试了几种组合,但似乎没有一种适用于这种情况。在此之前,我已经完成了先前的结构硬编码初始化,但是这次还没有完成结构中的结构。

有什么建议么?

用户6555228
struct chess {
    struct coordinate {
        char piece;
        int alive;
    } pos[3];
} table[3] =
{
    {
        .pos = {{ .piece = 'Q', .alive = 1 },
                { .piece = 'Q', .alive = 1 },
                { .piece = 'Q', .alive = 1 }
               }
    },
    {
        .pos = {{ .piece = 'B', .alive = 1 },
                { .piece = 'B', .alive = 1 },
                { .piece = 'B', .alive = 1 }
               }
    },
    {
        .pos = {{ .piece = 'K', .alive = 1 },
                { .piece = 'K', .alive = 1 },
                { .piece = 'K', .alive = 1 }
               }
    }
};

看来行得通。只需注意大括号的位置,请尝试理解您正在输入的内容。这是阅读答案的方法:

  1. table [3]是一个数组。因此,初始化程序以“ {”开头,以“};”结尾,每个元素都以“,”分隔
  2. 该数组的每个元素都是一个“结构象棋”。因此,每个子元素均以“ {”开头,并以“}”结尾
  3. 在每个“结构象棋”中,都有一个数组“ pos [3]”。因此,另一个子子'{'和'}'
  4. 每个'pos'是一个结构,因此有sub-sub-sub'{'和'}'
  5. 最后,田野在这里。使用C99初始化程序列表可使代码更整洁。C中的双引号是char *,而不是char。使用单引号

忠告:

  • 尽量减少“难读”代码的数量。它将为您服务
  • 我从不使用嵌套结构。需要时,分离它们的代码并创建函数以对其进行初始化。
  • CPPReference很有用
  • 为您的结构使用好的变量名称和标识符。当我读“ pos”时,我认为它是国际象棋上的一个位置((x,y)信息坐标)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章