如何用零初始化结构的数组字段

时间:2019-04-25 06:51:51

标签: c struct

我有以下结构

typedef struct mainstruct {
    uint32_t        var1;
    field_struct    var2[2];
    uint32_t        var3;
} main_struct;

其中field_struct为:

typedef struct fieldstruct {
    uint8_t     var11[8];
    uint32_t    var22; 
    uint32_t    var33; 
    uint8_t     var44[16];
    uint8_t     var55[16];
    uint8_t     var66[16];
} field_struct;

如何将main_struct中的所有field_struct字段初始化为全零? 另外,var1和var2需要初始化为特定值。

3 个答案:

答案 0 :(得分:4)

如果您部分初始化该结构,则未显式初始化的其余成员将设置为零。因此,只需初始化那些需要特定值的成员就足够了:

main_struct ms = 
{
  .var1 = something,
  .var2 = { something_else },
};

答案 1 :(得分:1)

  

如何将field_struct中的所有main_struct字段初始化为全零?

如果您无权使用指定的初始化程序(C99和C11),则可以将整个结构零初始化,然后将其余的初始化为所需的任何内容:

main_struct s = {0};
s.var1 = ...;

优化器将做正确的事情。当然,如果您不想初始化所有内容,则必须手动初始化仅需要的内容。

答案 2 :(得分:0)

如果您要为结构成员设置默认值,则根本无法做到:结构是数据类型,而不是数据类型的实例。

相反,如果只想初始化数据类型的实例的成员,则可以使用Lundin's answer中描述的方法。