C99的Designated Initializers特性

本文介绍了C99标准中的Designated Initializers特性,该特性允许开发者以更灵活的方式初始化数组、结构体和联合体。通过使用designator,如'[index]'和'.fieldname',可以在任意顺序下初始化成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C99标准引入了Designated Initializers特性使得数组、结构体和联合体的初始化更加灵活和方便。

对于一个数组:

int a[10] = { [1] = 1, [8 ... 9] = 10 };
这样可以只初始化a[1], a[8], a[9]三个元素,其他元素的值为0,相当于:

int a[10] = {0, 1, 0, 0, 0, 0, 0, 0, 10, 10};


对于一个结构体:

struct point {
    int x;
    int y;
};

struct point p = { .y = 1, .x = 10 };
这相当于:

struct point p = { 10, 1 };
struct的特性也可以用于union。

这里的 '[index]''.fieldname'称为designator。

使用这个特性你就可以按照任意顺序初始化数组、结构体和联合体中的成员了。

甚至,这两个designator还可以联合使用,例如:

struct point p_array[10] = { [1].x = 1, [2].y = 1 };
是不是有点动态语言的特性了?

完整特性描述请查看GCC官方文档:Designated Initializer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值