拉丁的传说
除非该值为0(在这种情况下,您可以省略初始化程序的某些部分,并且相应的元素将初始化为0),否则没有简单的方法。但是,不要忽视明显的解决方案:int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };缺少值的元素将初始化为0:int myArray[10] = { 1, 2 }; // initialize to 1,2,0,0,0...所以这会将所有元素初始化为0:int myArray[10] = { 0 }; // all elements 0在C ++中,空的初始化列表也会将每个元素初始化为0. C 不允许这样做:int myArray[10] = {}; // all elements 0 in C++请记住,如果未指定初始化程序,具有静态存储持续时间的对象将初始化为0:static int myArray[10]; // all elements 0而“0”并不一定意味着“所有位为零”,因此使用上述内容比memset()更好,更便携。(浮点值将初始化为+0,指向空值的指针等)
饮歌长啸
对于静态初始化具有相同值的大型数组,无需多次复制粘贴,您可以使用宏:#define VAL_1X 42#define VAL_2X VAL_1X, VAL_1X#define VAL_4X VAL_2X, VAL_2X#define VAL_8X VAL_4X, VAL_4X#define VAL_16X VAL_8X, VAL_8X#define VAL_32X VAL_16X, VAL_16X#define VAL_64X VAL_32X, VAL_32Xint myArray[53] = { VAL_32X, VAL_16X, VAL_4X, VAL_1X };如果您需要更改该值,则必须仅在一个地方进行更换。编辑:可能有用的扩展(Jonathan Leffler提供)您可以通过以下方式轻松概括:#define VAL_1(X) X#define VAL_2(X) VAL_1(X), VAL_1(X)/* etc. */可以使用以下方法创建变体:#define STRUCTVAL_1(...) { __VA_ARGS__ }#define STRUCTVAL_2(...) STRUCTVAL_1(__VA_ARGS__), STRUCTVAL_1(__VA_ARGS__)/*etc */ 适用于结构或复合数组。#define STRUCTVAL_48(...) STRUCTVAL_32(__VA_ARGS__), STRUCTVAL_16(__VA_ARGS__)struct Pair { char key[16]; char val[32]; };struct Pair p_data[] = { STRUCTVAL_48("Key", "Value") };int a_data[][4] = { STRUCTVAL_48(12, 19, 23, 37) };宏名称可以协商。