2011-04-07 146 views
1

例如恆定值陣列我有:陳述在C++

int boo[8]; 
boo[1] = boo[3] = boo[7] = 4; 
boo[0] = boo[2] = 7; 
boo[4] = boo[5] = boo[6] = 15; 

如何我應該輸入它作爲恆定值?我看到類似的問題,但它並沒有幫助我。

編輯: 還有一個問題,如果噓指數0 1 3 4 5 6 7是恆定的,但噓[2]不是?是否有可能做到這一點?

+1

如果用「常量值」表示初始化l ist,你不能。但是一些編譯器提供了有趣的擴展。看看這個問題http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c – 2011-04-07 13:47:47

+0

你的意思是你想要const int boo [8]? – Dinaiz 2011-04-07 13:47:51

回答

7

這是你在找什麼?

const int boo[] = { 7, 4, 7, 4, 15, 15, 15, 4 }; 

優惠非const指針這樣的陣列中的一個條目:

int * foo = (int*)&boo[2]; 
+0

是的,還有一個問題,如果boo與索引0 1 3 4 5 6 7是常數但boo [2]不是? – Templar 2011-04-07 13:54:44

+0

@Templar,你不能混合搭配,恐怕是一場全無的事情...... – Nim 2011-04-07 13:56:41

+0

也許你可以通過不同的指針訪問它:int const * boo2 = boo + 2; 並且* boo2 = 5後; – BenjaminB 2011-04-07 13:59:11

3

一個不那麼完美的解決方案可以是:

const int boo[8] = {7,4,7,4,15,15,15,4}; 

另一種解決方案可以是:

int boo_[8]; 
boo_[1] = boo_[3] = boo_[7] = 4; 
boo_[0] = boo_[2] = 7; 
boo_[4] = boo_[5] = boo_[6] = 15; 
const int * boo = boo_; 
+1

不,看起來很優雅:) – x10 2011-04-07 13:54:02

+0

使用'boo_'而不是'_boo'。以下劃線或雙下劃線開頭的名稱保留供實現(編譯器)使用。這裏有一些規則,但它可能最好是在開始時一起避免下劃線。 – 2011-04-07 14:03:17