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个值的数组.有人可以详细解释一下吗?
在初始化器中反映子结构是可选的.所以这里有12个值足以初始化一个A.
我认为这是非常糟糕的风格,因为它使代码很难阅读.甚至更好的是使用指定的初始化器,使得初始化变得稳健而不是结构的变化.就像是
[0] = {.number1 = 5, .number2 = 1, .bool1 = true, .bool2 = true, },
Run Code Online (Sandbox Code Playgroud)
还观察到,C有一个正确的布尔类型和常数,你最好使用通过头<stdbool.h>为bool,false和true.