访问2D指针数组

时间:2013-07-16 22:09:43

标签: c arduino avr

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

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是数组colors的长度,colorsWrite是可以用一种颜色传输的位数。

目的是通过智能手机的光线传输数据到arduino和背面。为了获得更多带宽,数据用颜色编码。 colorsWrite定义了传输所有数据的大小colorsLen

2 个答案:

答案 0 :(得分:0)

好吧,根据您的问题判断,您可以像这样访问COLOR_ARRAY [1] [2]。所以该表达式中的[1]是:TWO_COLOR [],[2]是:RGB_GREEN。所以你可以像访问一样访问数组。

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

我可能会遗漏你问题的某些部分,但我希望它有所帮助或澄清。

此致 的Øyvind

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

答案 1 :(得分:0)

这一行:

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

n将至少为1,因为1&lt;&lt; 0 = 1 ...您使用n作为ONE_COLOR[n]的索引,因此您无法访问索引零处的颜色RGB_BLACK。