2013-07-16 135 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