说实话之前的确没看到过这种方式,现在想想的确有点孤陋寡闻了,这种初始化方式是在C99标准中新加入的(所以C89是不支持的),美其名曰“标记化结构初始化语法”。在标准C中,C89结构标准初始化是用{}来实始化,在C99的版本,则采用了可读性更强的标记化实始化,这种方式的优势就在于对结构体的初始化不必严格按照定义时的顺序。这带来了极大的灵活性,下面我转一下网上常引用的一个例子具体介绍下这种初始化方法的用法: 已知一个结构,定义如下 struct book { char title[MAXTITL]; char author[MAXAUTL]; float value; }; C99支持结构的指定初始化项目,其语法与数组的指定初始化项目近似。只是,结构的指定初始化项目使用点运算符和成员名(而不是方括号和索引值)来标识具体的元素。例如,只初始化book结构的成员value,可以这样做: struct book surprise = { .value = 10.99 }; 可以按照任意的顺序使用指定初始化项目: struct book gift = { .value = 25.99, .author = "James Broadfool", .title = "Rue for the Toad"}; 正像数组一样,跟在一个指定初始化项目之后的常规初始化项目为跟在指定成员后的成员提供了初始值。另外,对特定成员的最后一次赋值是它实际获得的值,例如,考虑下列声明: struct book gift = { .value = 18.90, .author = "Philionna pestle", 0.25}; 这将把值0.25赋给成员value,因为它在结构声明中紧跟在author成员之后。新的值0.25代替了早先的赋值18.90。
|