我有以下结构
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需要初始化为特定值。
答案 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中描述的方法。