首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将C或C99中的结构数组初始化为所有相同的值

将C或C99中的结构数组初始化为所有相同的值
EN

Stack Overflow用户
提问于 2016-06-02 16:14:18
回答 4查看 5.8K关注 0票数 8

让我们在C或C99中假设如下:

代码语言:javascript
运行
复制
typedef struct
{
   int x;
   double y;
} MY_S;

MY_S a[666] = {333, 666.6};

这是否只初始化数组的第一个对象?如果是,是否有一种方法可以使用该语法将数组的所有元素初始化为所有相同的值(不调用函数/循环,也不重复初始化程序)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-02 16:35:48

引用C99标准第6.7.8节的话:

如果大括号括起来的列表中的初始化器少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文本中的字符少于数组中的元素,则聚合的其余部分将被隐式初始化,与具有静态存储持续时间的对象相同。

也就是说,只有第一个元素将被初始化为所提供的值,而其他元素将被填充为零。

除了循环之外,没有其他方法(在标准C中)可以初始化一个复杂结构数组(memset()可以用来初始化具有指定值的内存块)。

票数 3
EN

Stack Overflow用户

发布于 2016-06-02 16:41:27

在标准C中,您需要重复初始化器。在GCC中,可以指定要用相同的初始化器初始化的元素范围,例如:

代码语言:javascript
运行
复制
MY_S a[666] = { [0 ... 665] = {333, 666.0} };
票数 6
EN

Stack Overflow用户

发布于 2016-06-02 16:38:52

如果我正确地理解了您,您需要查看指定的初始化器指定初始化器

这是一个GNU C扩展,您可以用它在一次演示中初始化数组的值。

代码语言:javascript
运行
复制
int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

这将初始化1到元素0到9,2初始化元素10到99,3到100元素。

在你的情况下,就像

代码语言:javascript
运行
复制
MY_S a[666] = { [0 .. 665] = {333, 666.0} };
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37597089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档