在外部结构初始化中反映内部结构

Lis*_*sek 3 c arrays compound-literals

我有一个结构代码如下所示:

typedef struct A {
  B numberOfB[3];
} A;

typedef struct B {
  int number1;
  int number2;
  boolean bool1;
  boolean bool2;
} B;
Run Code Online (Sandbox Code Playgroud)

在源代码中,我有一个初始化,如下所示:

A* pointerToA = (A[3]) {

  {5, 1, TRUE, TRUE,
   6, 1, TRUE, FALSE,
   7, 1, TRUE, FALSE},

  {5, 1, TRUE, TRUE,
   6, 1, TRUE, FALSE,
   7, 1, TRUE, FALSE},

  {5, 1, TRUE, TRUE,
   6, 1, TRUE, FALSE,
   7, 1, TRUE, FALSE},
}
Run Code Online (Sandbox Code Playgroud)

源代码中的这种构造正在更新字段,struct B但我不明白如何更新字段,B因为它是刚刚列出的值,因为它是12个值的数组.有人可以详细解释一下吗?

Jen*_*edt 5

在初始化器中反映子结构是可选的.所以这里有12个值足以初始化一个A.

我认为这是非常糟糕的风格,因为它使代码很难阅读.甚至更好的是使用指定的初始化器,使得初始化变得稳健而不是结构的变化.就像是

[0] = {.number1 = 5, .number2 = 1, .bool1 = true, .bool2 = true, },
Run Code Online (Sandbox Code Playgroud)

还观察到,C有一个正确的布尔类型和常数,你最好使用通过头<stdbool.h>bool,falsetrue.