结构体指定初始化

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

转载于:https://www.cnblogs.com/lbsx/archive/2009/09/17/1568230.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值