结构体指定初始化

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

你可能感兴趣的:(初始化)