在外部结构初始化中反映内部结构
Reflecting inner struct in outer struct initialization
我有一个结构代码如下:
typedef struct A {
B numberOfB[3];
} A;
typedef struct B {
int number1;
int number2;
boolean bool1;
boolean bool2;
} B;
在源代码中,我有一个如下所示的初始化:
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},
}
源代码中的此类构造正在更新 struct B
中的字段,但我不明白 B
中的字段是如何更新的,因为值只是列出,因为它是一个包含 12 个值的数组。有人可以详细解释一下吗?
在初始化程序中反映子结构是可选的。所以这里有 12 个值足以初始化一个 A
.
虽然我认为这确实是一种糟糕的风格,因为它使代码很难阅读。甚至更好的方法是使用指定的初始值设定项,这样初始化相对于结构的变化变得健壮。像
[0] = {.number1 = 5, .number2 = 1, .bool1 = true, .bool2 = true, },
还要注意 C 有一个正确的布尔类型和常量,您最好通过 header <stdbool.h>
将其用作 bool
、false
和 true
.
从C99实际引入的复合文字:
复合文字看起来像是在执行包含初始值设定项的转换。它的值是一个在强制转换中指定类型的对象,包含初始化器中指定的元素;它是一个左值。
在 C 语言中,复合文字指定具有静态或自动存储持续时间的未命名对象。
简单复合文字的语义。下面只是使用复合文字的示例结构初始化。
struct sample {int a; int b;} struct_obj;
这就是为 struct_obj 构造复合文字的方式。
struct_obj = ((struct sample) {1, 2});
这相当于
{
struct foo temp = {1, 2};
structure = temp;
}
在你的例子中,结构 A 是用数组值初始化的。
A* pointerToA = (A[3]) {..... } // here A[3] is initialized with the values in your array.
我有一个结构代码如下:
typedef struct A {
B numberOfB[3];
} A;
typedef struct B {
int number1;
int number2;
boolean bool1;
boolean bool2;
} B;
在源代码中,我有一个如下所示的初始化:
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},
}
源代码中的此类构造正在更新 struct B
中的字段,但我不明白 B
中的字段是如何更新的,因为值只是列出,因为它是一个包含 12 个值的数组。有人可以详细解释一下吗?
在初始化程序中反映子结构是可选的。所以这里有 12 个值足以初始化一个 A
.
虽然我认为这确实是一种糟糕的风格,因为它使代码很难阅读。甚至更好的方法是使用指定的初始值设定项,这样初始化相对于结构的变化变得健壮。像
[0] = {.number1 = 5, .number2 = 1, .bool1 = true, .bool2 = true, },
还要注意 C 有一个正确的布尔类型和常量,您最好通过 header <stdbool.h>
将其用作 bool
、false
和 true
.
从C99实际引入的复合文字:
复合文字看起来像是在执行包含初始值设定项的转换。它的值是一个在强制转换中指定类型的对象,包含初始化器中指定的元素;它是一个左值。
在 C 语言中,复合文字指定具有静态或自动存储持续时间的未命名对象。
简单复合文字的语义。下面只是使用复合文字的示例结构初始化。
struct sample {int a; int b;} struct_obj;
这就是为 struct_obj 构造复合文字的方式。
struct_obj = ((struct sample) {1, 2});
这相当于
{
struct foo temp = {1, 2};
structure = temp;
}
在你的例子中,结构 A 是用数组值初始化的。
A* pointerToA = (A[3]) {..... } // here A[3] is initialized with the values in your array.