任何人都可以解释一下有关指定初始化程序的以下内容:
初始化列表可以省略在聚合中任何地方声明的元素,而不是仅在结尾处。
答案 0 :(得分:9)
如果使用传统的初始化列表,则按顺序分配元素的值,因此如果您有此结构:
typedef struct _foo {
int a;
int b;
} foo_t;
然后此初始化工具明确指定a
而非b
:
foo_t value = { 7 };
没有指定的初始化者,唯一可以省略的元素是在末尾声明的元素
使用指定的初始化程序,您可以省略在任何地方声明的元素:
foo_t value = { .b = 8 };
因此省略了value.a
的初始化,尽管它是结构中的第一个值。
答案 1 :(得分:2)
试试这个link。
这个想法是能够在初始化期间引用类似结构的复杂类型的成员。 E.g。
struct s {
int a, b;
};
int main() {
struct s = { .b = 42, .a = -42 };
return 0;
}
在指定值时,通过独立于顺序获得灵活性。请记住,这已添加到C99标准中,并且可能不受完全不支持C99(或支持早期版本标准)的编译器支持。