【问题标题】:Static initialization of int array from within structure initialization从结构初始化中静态初始化 int 数组
【发布时间】:2021-01-31 02:08:51
【问题描述】:

我正在尝试静态声明和初始化一个包含 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 数组?

【问题讨论】:

    标签: arrays c pointers structure static-initialization


    【解决方案1】:

    您可以使用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},
        },
    };
    

    【讨论】:

    • @anastaciu 哦,OP 说“以下示例运行良好。”但它实际上不会......
    • 是的,经常出现的问题:)
    • @MikeCAT 代码已修复,以前从未听说过复合文字。谢谢
    • @Arkaik,好吧,只剩下一件事要做,UV 和接受。
    【解决方案2】:

    value 不是数组,而是指针。 您必须通过引用其他地方存在的数组来对其进行初始化。

    确实name 的工作方式不同,因为字符串"like this" 的词法文字语法创建了一个未命名的字符数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2023-04-05
      • 2014-08-05
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多