C99标准引入了Designated Initializers特性使得数组、结构体和联合体的初始化更加灵活和方便。
对于一个数组:
int a[10] = { [1] = 1, [8 ... 9] = 10 };
这样可以只初始化a[1], a[8], a[9]
三个元素,其他元素的值为0,相当于:
int a[10] = {0, 1, 0, 0, 0, 0, 0, 0, 10, 10};
对于一个结构体:
struct point {
int x, y;
};
struct point p = { .y = 1, .x = 10 };
这相当于:
struct point p = { 10, 1 };
struct的特性也可以用于union。
这里的[index]和 .fieldname称为designator。
使用这个特性你就可以按照任意顺序初始化数组、结构体和联合体中的成员了。
甚至,这两个designator还可以联合使用,例如:
struct point p_array[10] = { [1].x = 1, [2].y = 1 };
是不是有点动态语言的特性了?
完整特性描述请查看GCC官方文档:Designated Initializers
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。