注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学习笔记

正确的方法如同学习书法,开始的时候要临摹,临摹好了然后创造自己的风格。

 
 
 

日志

 
 

[C/C++笔记]结构体初始化时为何使用“.”  

2013-09-08 17:27:50|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
       结构体的初始化常有如下三种方式:
       1、在传统的ANSI C(C89/90),当你使用联合初始化方式时(在{}中初始化)。你将不得不从第一个成员开始,按顺序对结构体的每个成员进行单独的初始化0。
例如:
struct S { int a, b, c, d; };
struct S s = { 1, 2, 3, 4 };
/* 1 for `s.a`, 2 for `s.b` and so on... */
       但是,并不需要对所有的成员进行初始化,你可以在任何成员处停止(剩下的成员被初始化为0)。如果你只想精确地初始化结构体的第三个成员,你不得不对第一、二个成员赋值(仅仅是为了得到需要的第三个)。
/* We only care to explicitly initialize `s.c` */
struct S s = { 0, 0, 3 };
/* and we have no choice but to explicitly initialize `s.a` and `s.b` as well */
       2、新的C语言(C99)允许你使用标记(tagged)方式初始化,通过指定的成员和{}。
struct S s = { .c = 3 };
       使用这种方式,你只需要清楚地指定目标成员。(其他的成员会隐含地被编译器初始化为0)。这种方式不仅仅是节省了你一些敲击键盘的时间,而且让结构体成员的初始化更灵活,不需要按照结构体成员的顺序来进行。
       联合初始化也能用在数组中,C99也支持数组的标记(tagged)初始化。如下所示:
int a[10] = { [5] = 3 };
       3、使用已经初始化的结构体去赋值另一个。
/* Define a variable q of type point, and set members to the same values as those of p */
struct S q = p;

Reference:
http://stackoverflow.com/questions/3016107/what-is-tagged-structure-initialization-syntax
http://en.wikipedia.org/wiki/Struct_(C_programming_language)#Struct_initialization
  评论这张
 
阅读(872)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017