代码之家  ›  专栏  ›  技术社区  ›  Arkaik zx81

从结构内部初始化对int数组进行静态初始化

  •  0
  • Arkaik zx81  · 技术社区  · 4 年前

    我试图静态声明并初始化一个包含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,
        },
    };
    

    value 直接从 myStructArray

    我想知道是否有方法初始化 价值 无需声明的字段 struct1_value struct2_value

    也许在纯C语言中是不可能的,但是可以静态初始化 char 阵列,为什么不使用 int 阵列?

    2 回复  |  直到 4 年前
        1
  •  2
  •   MikeCAT    4 年前

    你可以用 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},
        },
    };
    
        2
  •  0
  •   JDługosz    4 年前

    value

    的确 name 因为字符串的词法-文字语法不同 "like this" 创建一个未命名的字符数组。