从结构初始化内部对 int 数组进行静态初始化
Static initialization of int array from within structure initialization
我正在尝试静态声明和初始化包含 char 和 int 数组的结构数组。
下面的例子效果很好。
typedef struct myStruct
{
char* name;
uint8_t size;
uint8_t *value;
}myStruct;
uint8_t struct1_value[] = {0x00, 0x01};
uint8_t struct2_value[] = {0x00, 0x01, 0x03, 0x04};
myStruct myStructArray[] = {
[0] = {
.name = "Struct_1",
.size = 2,
.value = struct1_value,
},
[1] = {
.name = "Struct_2",
.size = 4,
.value = struct2_value,
},
};
我找不到允许直接从 myStructArray
初始化 value
字段的语法
我想知道是否有一种方法可以初始化 value
字段而无需声明 struct1_value
和 struct2_value
变量。
也许这在纯 C 中是不可能的,但由于可以静态初始化 char
数组,为什么不使用 int
数组呢?
您可以使用 compound literals.
myStruct myStructArray[] = {
[0] = {
.name = "Struct_1",
.size = 2,
.value = (uint8_t[]){0x00, 0x01},
},
[1] = {
.name = "Struct_2",
.size = 4,
.value = (uint8_t[]){0x00, 0x01, 0x03, 0x04},
},
};
value
不是数组,而是指针。
您必须通过引用其他地方存在的数组来初始化它。
实际上 name
的工作方式不同,因为字符串的词法文字语法 "like this"
创建了一个未命名的字符数组。
我正在尝试静态声明和初始化包含 char 和 int 数组的结构数组。
下面的例子效果很好。
typedef struct myStruct
{
char* name;
uint8_t size;
uint8_t *value;
}myStruct;
uint8_t struct1_value[] = {0x00, 0x01};
uint8_t struct2_value[] = {0x00, 0x01, 0x03, 0x04};
myStruct myStructArray[] = {
[0] = {
.name = "Struct_1",
.size = 2,
.value = struct1_value,
},
[1] = {
.name = "Struct_2",
.size = 4,
.value = struct2_value,
},
};
我找不到允许直接从 myStructArray
value
字段的语法
我想知道是否有一种方法可以初始化 value
字段而无需声明 struct1_value
和 struct2_value
变量。
也许这在纯 C 中是不可能的,但由于可以静态初始化 char
数组,为什么不使用 int
数组呢?
您可以使用 compound literals.
myStruct myStructArray[] = {
[0] = {
.name = "Struct_1",
.size = 2,
.value = (uint8_t[]){0x00, 0x01},
},
[1] = {
.name = "Struct_2",
.size = 4,
.value = (uint8_t[]){0x00, 0x01, 0x03, 0x04},
},
};
value
不是数组,而是指针。
您必须通过引用其他地方存在的数组来初始化它。
实际上 name
的工作方式不同,因为字符串的词法文字语法 "like this"
创建了一个未命名的字符数组。