指定的初始化器和省略的元素
任何人都可以解释有关指定初始化器的以下内容:
初始化列表可以省略在聚合中的任何位置声明的元素,而不是仅在末尾。
试试这个链接 。
我们的想法是能够在初始化期间引用类似结构的复杂类型的成员。 例如
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中的第一个值。