2011-04-07 107 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