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

Sil*_*cer 5 c arrays struct initialization c99

让我们在C或C99中假设以下内容:

typedef struct
{
   int x;
   double y;
} MY_S;

MY_S a[666] = {333, 666.6};
Run Code Online (Sandbox Code Playgroud)

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

Ian*_*ott 7

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

MY_S a[666] = { [0 ... 665] = {333, 666.0} };
Run Code Online (Sandbox Code Playgroud)


s7a*_*ser 3

引用C99标准第6.7.8节:

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

即只有第一个元素将被初始化为提供的值,而其他元素将用零填充。

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