结构体指定初始化

标准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 

数组初始化也类似:

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 



参考:
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/

posted on 2009-09-17 09:01  lbsx  阅读(686)  评论(0编辑  收藏  举报