如何在运行时指定数组?

时间:2011-08-15 04:05:46

标签: iphone c++ objective-c c

我正在尝试做什么

基本上,我有几个可能用宏定义的数组:

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

在运行时,我有一个C-Array,可以在某个类的很多地方使用。我希望这个数组使用其中一个#define值,即:

int components[4];

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

-

问题

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

Expected expression before '[' token

有人会介意解释发生了什么,以及我如何实现我的目标?任何帮助将不胜感激 - 谢谢!

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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];

答案 2 :(得分: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 //这将得到数组长度,或者你可以只放数组长度;

     

if(case1)

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

否则if(case2)

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