vs写c语言结构体,Struct and union initialization(结构体与联合体初始化)

在初始化struct或union类型的对象时,初始值设定项必须是成员的非空的,括号括起来的以逗号分隔的初始值设定项列表:

= {表达式,...}(直到C99)= {指定者(可选)表达式,...}(自C99以来)

其中指示符是.表单[索引中的表单成员和数组指示符的各个成员标识符的序列(空格分隔或相邻)]。

所有未明确初始化的成员都会以与具有静态存储持续时间的对象相同的方式隐式初始化。

说明

初始化联合时,初始化程序列表必须只有一个成员,它将初始化联合的第一个成员,除非使用了指定的初始化程序(自C99以来)。

union { int x; char c[4]; }

u = {1},           // makes u.x active with value 1

u2 = { .c={'\1'} }; // makes u2.c active with value {'\1','\0','\0','\0'}

当初始化一个结构时,列表中的第一个初始化器初始化第一个声明的成员(除非指定了指定符)(自C99开始),并且没有指定符的所有后续初始化器(自C99开始)初始化在先前由表达。

struct point {double x,y,z;} p = {1.2, 1.3}; // p.x=1.2, p.y=1.3, p.z=0.0div_t answer = {.quot = 2, .rem = -1 };      // order of elements in div_t may vary

指示符使下列初始化程序初始化由指定符描述的结构成员。然后按照声明的顺序继续初始化,从在指定符描述的声明之后声明的下一个元素开始。struct {int sec,min,hour,day,mon,year;} z = {.day = 31,12,2014,.sec = 30,15,17}; //将z初始化为{30,15,17,31,12,2014}(自C99以来)

提供比成员更多的初始化器是错误的。

嵌套初始化

如果结构体或联合体的成员是数组,结构体或联合体,则大括号括起来的初始化程序中相应的初始化程序是对这些成员有效的任何初始化程序,除了它们的大括号可以省略如下:

如果嵌套的初始化程序以一个左大括号开始,则整个嵌套初始化程序直到其大括号初始化相应的成员对象。每个左开口大括号建立一个新的当前对象。当前对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值