2013-07-16 99 views
1

我有4个数组,每个数组都有不同数量的条目。所有这些阵列都收集在另一个阵列中。它的实现是这样的:访问2D指针阵列

代码在C库

static const int32_t ONE_COLOR[2] = { RGB_BLACK, RGB_WHITE }; 


static const int32_t TWO_COLOR[4] = { RGB_WHITE, RGB_RED, RGB_GREEN, RGB_BLUE }; 


static const int32_t THREE_COLOR[8] = { RGB_BLACK, RGB_RED, RGB_GREEN, RGB_BLUE, 
    RGB_CYAN, RGB_YELLOW, RGB_MAGENTA, RGB_WHITE }; 


static const int32_t FOUR_COLOR[16] = { RGB_WHITE, RGB_RED, RGB_GREEN, RGB_BLUE, 
    RGB_CYAN, RGB_YELLOW, RGB_MAGENTA, RGB_DARK_RED, RGB_DARK_GREEN, 
    RGB_DARK_BLUE, RGB_LIGHT_BLUE, RGB_LIGHT_GREEN, RGB_ORANGE, RGB_LIME, 
    RGB_PINK, RGB_LILA }; 

static const int32_t* COLOR_ARRAY[4] = { ONE_COLOR, TWO_COLOR, THREE_COLOR, 
    FOUR_COLOR }; 

如何访问COLOR_ARRAY [1] [2]例如? 感谢您的帮助:)

编辑 示例代码访问:

代码Arduino的

for (i = 0; i < colorsLen; i++) { 
      n = 0; 
      for (j = 0; j < colorsWrite; j++) { 
        if (bitArray[i * colorsWrite + j] == 1) { 
          n |= 1 << (colorsWrite - 1 - j); 

        } 
      } 
      colors[i] = COLOR_ARRAY[colorsWrite - 1][n]; 
// testing access 
//    colors[i] = ONE_COLOR[n]; 
//    colors[i] = n; 
    } 

colorsLen是数组的长度colorscolorsWrite是可以用一种颜色传输的位数量。

其目的是通过智能手机上的光线将数据传输到arduino并返回。为了获得更多的带宽,数据用颜色编码。 colorsWrite定义了colorsLen应该获得所有数据传输的大小。

+0

''COLOR_ARRAY [1] [2]''有什么问题? – hivert

+0

我试过了,它编译。但是,如果我想在我的arduino上访问它,它会死:(如果我直接访问其中一个数组* * COLOR直接它的工作。 – famalgosner

+0

它是否给出一些错误消息吗?你确定你不走出数组(例如''COLOR_ARRAY [1] [33]'')? – hivert

回答

0

好吧,从你的问题来看,你就像那样访问COLOR_ARRAY [1] [2]。所以表达式中的[1]是:TWO_COLOR [],而[2]是:RGB_GREEN。所以你可以像你一样访问一个数组。

I.e:const COLOR clr = COLOR_ARRAY [1] [2];

我可能会遗漏部分问题,但我希望它能帮助或澄清。

问候, 岛之风

编辑 这个答案可能会给你一个指针 Defining a static array into a C or C++ source file

0

这一行:

n |= 1 << (colorsWrite - 1 - j); 

N值将至少为1,因为1 < < 0 = 1 ...你使用n作为索引ONE_COLOR[n]所以哟你不能访问RGB_BLACK索引0处的颜色。

+0

但是这部分代码只有在条目1正确时才可以访问。 – famalgosner

+0

对不起,也许如果你在你的问题中描述这些colorsLen和colorsWrite变量的目的? – nio