从结构初始化内部对 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_valuestruct2_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" 创建了一个未命名的字符数组。