3 回答

TA貢獻(xiàn)1789條經(jīng)驗 獲得超8個贊
除非該值為0(在這種情況下,您可以省略初始化程序的某些部分,并且相應(yīng)的元素將初始化為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++
請記住,如果未指定初始化程序,具有靜態(tài)存儲持續(xù)時間的對象將初始化為0:
static int myArray[10]; // all elements 0
而“0”并不一定意味著“所有位為零”,因此使用上述內(nèi)容比memset()更好,更便攜。(浮點(diǎn)值將初始化為+0,指向空值的指針等)

TA貢獻(xiàn)1951條經(jīng)驗 獲得超3個贊
對于靜態(tài)初始化具有相同值的大型數(shù)組,無需多次復(fù)制粘貼,您可以使用宏:
#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_32X
int myArray[53] = { VAL_32X, VAL_16X, VAL_4X, VAL_1X };
如果您需要更改該值,則必須僅在一個地方進(jìn)行更換。
編輯:可能有用的擴(kuò)展
您可以通過以下方式輕松概括:
#define VAL_1(X) X
#define VAL_2(X) VAL_1(X), VAL_1(X)
/* etc. */
可以使用以下方法創(chuàng)建變體:
#define STRUCTVAL_1(...) { __VA_ARGS__ }
#define STRUCTVAL_2(...) STRUCTVAL_1(__VA_ARGS__), STRUCTVAL_1(__VA_ARGS__)
/*etc */
適用于結(jié)構(gòu)或復(fù)合數(shù)組。
#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) };
宏名稱可以協(xié)商。
添加回答
舉報