C语言结构体的初始化

  今天在工作时,看到了奇葩的结构体初始化方式,于是我查了一下C99标准文档和gcc的说明文档,终于搞清楚是怎么回事了。

  假设有如下结构体定义:

typedef struct
{
    int a, b, c;
} MyStruct;

  那么结构体的初始化方式如下有三种:

(1) C89的初始化方式

MyStruct test = {1, 2, 3};

  这种初始化的优点是语法简单,无需输入变量名;缺点是成员变量的初始化顺序必须与声明的一致,无法乱序初始化。

(2) C99新增的“指定初始化列表”(designated initializers)的初始化方式

MyStruct test = {.b = 2, .a = 1, .c = 3};

  这种初始化的优点是可以乱序初始化;缺点是语法略微复杂,要打变量名。

(3) gcc的初始化方式(GNU扩展,非标准)

MyStruct test = {a : 1, b : 2, c : 3};

与上一种相同,优点可乱序初始化;缺点语法略微复杂。另外还有一个缺点——非标准,可移植性差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值