亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將數組的所有成員初始化為相同的值?

如何將數組的所有成員初始化為相同的值?

慕哥6287543 2019-05-28 17:48:48
如何將數組的所有成員初始化為相同的值?我在C中有一個大數組(如果有所不同,則不是C ++)。我想將所有成員初始化為相同的值。我發誓我曾經知道一個簡單的方法來做到這一點。我可以memset()在我的情況下使用,但是沒有辦法在C語法中構建這樣做嗎?
查看完整描述

3 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

除非該值為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,指向空值的指針等)


查看完整回答
反對 回復 2019-05-28
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

對于靜態初始化具有相同值的大型數組,無需多次復制粘貼,您可以使用宏:


#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 };

如果您需要更改該值,則必須僅在一個地方進行更換。

編輯:可能有用的擴展

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) };

宏名稱可以協商。


查看完整回答
反對 回復 2019-05-28
  • 3 回答
  • 0 關注
  • 2076 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號