结构体指定初始化
标准C89需要初始化语句的元素以固定的顺序出现,和被初始化的数组或结构体中的元素顺序一样。
在ISO C99中,你可以按任何顺序给出这些元素,指明它们对应的数组的下标或结构体的成员名。
gcc采用ANSI C的struct结构体的初始化形式:
1 struct s
2 {
3 int a;
4 int b;
5 };
6
7 struct s i =
8 {
9 .a = 3,
10 .b = 4,
11 };
12
2 {
3 int a;
4 int b;
5 };
6
7 struct s i =
8 {
9 .a = 3,
10 .b = 4,
11 };
12
数组初始化也类似:
1 int arr[3] = {[2] = 3, [0] = 2,};
它们为什么采用这种形式进行初始化很好理解,形式上 i.a = 3; arr[2] = 3; 初始化只是把名字省掉,后面部分放到了花括号内。
“[index]
”或“.fieldname
”就是指示符。
老版本:非标准的初始化形式
1 struct s
2 {
3 int a;
4 int b;
5 };
6
7 struct s i =
8 {
9 a : 3,
10 b : 4,
11 };
12
2 {
3 int a;
4 int b;
5 };
6
7 struct s i =
8 {
9 a : 3,
10 b : 4,
11 };
12
参考:
http://www.kerneltravel.net/newbie/gcc_man.html#5.22
这篇文章中说有“.fieldname:
” 这样一种初始化形式,貌似不对,fieldname前没有"."
http://blog.hjenglish.com/bedford/articles/1078996.html
http://linuxprograms.wordpress.com/2008/03/07/c-structure-initialization-advanced/