指定的初始化器和省略的元素

任何人都可以解释有关指定初始化器的以下内容:

初始化列表可以省略在聚合中的任何位置声明的元素,而不是仅在末尾。

试试这个链接 。

我们的想法是能够在初始化期间引用类似结构的复杂类型的成员。 例如

struct s { int a, b; }; int main() { struct s = { .b = 42, .a = -42 }; return 0; } 

在指定值时,通过独立于顺序获得灵活性。 请记住,这已被添加到C99标准中,并且可能不受完全不支持C99(或支持该标准的早期版本)的编译器的支持。

如果使用常规初始化列表,则按顺序分配元素的值,因此如果您具有此结构:

 typedef struct _foo { int a; int b; } foo_t; 

那么这个初始化者明确指定a而不是b

 foo_t value = { 7 }; 

没有指定的初始化程序,唯一可以省略的元素是最后声明的元素

使用指定的初始化程序,您可以省略在任何地方声明的元素:

 foo_t value = { .b = 8 }; 

所以省略了value.a的初始化,尽管它是struct中的第一个值。