2011-08-15 33 views
0

我正在尝试做如何在运行时指定数组?

基本上,我已经得到了我定义与宏几种可能的排列:

#define ARRAY_ONE {0, 2, 7, 8} 
#define ARRAY_TWO {3, 6, 9, 2} 
#define ARRAY_THREE {3, 6, 4, 5} 
//etc... 

在运行时,我有被中使用的C-阵列很多地方在某个班级。我想这个阵列使用的#define值之一,即:

int components[4]; 

if (caseOne) 
{ 
    components = ARRAY_ONE; 
} 
else if (caseTwo) 
{ 
    components = ARRAY_TWO; 
} 
else if (caseThree) 
{ 
    //etc... 
} 

-

的问题

然而,上面的代码不起作用。相反,我得到一个奇怪的错误

Expected expression before '[' token 

会有人心中解释这是怎么回事,我怎么能做到什么,我试图?任何帮助将不胜感激 - 谢谢!

回答

4

我不认为C数组可以在声明后使用花括号语法进行初始化。你只能在声明它们时初始化它们。

尝试用调整以前发布的答案:

const int ARRAY_ONE[] = {0, 2, 7, 8}; 
const int ARRAY_TWO[] = {3, 6, 9, 2}; 
const int ARRAY_THREE[] = {3, 6, 4, 5}; 

int *components; 
if (case1) { 
    components = ARRAY_ONE; 
} else if (case2) { 
    components = ARRAY_TWO; 
} else if (case3) { 
    components = ARRAY_THREE; 
} 
+0

这完全正确。我能想到的最明显的解决方案是使用'memcpy'将所需的数组复制到组件中。 – Tommy

+0

啊!我明白了以前的答案,现在想说的是,在我的情况下,使用上面的指针似乎是一个很好的解决方案。谢谢! –

+0

更确切地说,C中的变量除声明时外无法初始化。之后,您只需简单地分配它们,而不能分配C数组。 – Chuck

0

我真的无法弄清楚错误是什么。我怀疑它可能来自您未发布的某些代码。是否说错误在int components[4];行?

会这样吗?我使用常量而不是定义。

const int ARRAY_ONE[] = {0, 2, 7, 8}; 
const int ARRAY_TWO[] = {3, 6, 9, 2}; 
const int ARRAY_THREE[] = {3, 6, 4, 5}; 

int* components = ARRAY_ONE; 

int whatever = components[2]; 
+0

感谢您的答复!错误出现在components = ARRAY行上。你的方法似乎没有考虑到组件可能是数组一,二,三的事实 - 这是我遇到麻烦的地方。 –

0

尝试:

INT ARRAY_ONE [] = {0,2,7,8};

int ARRAY_TWO [] = {3,6,9,2};

int ARRAY_THREE [] = {3,6,4,5};

int components [4];

int count = sizeof(components)/ 4 //这将获得数组的长度,或者你可以把数组长度;

如果(情形)

for (int i =0; i< count; i++) 
     components[i] = ARRAY_ONE[i]; 

否则,如果(情形2)

for (int i =0; i< count; i++) 
     components[i] = ARRAY_TWO[i]; 
相关问题