如何创建一个变量数组Arduino

时间:2014-02-28 00:21:13

标签: c++ c arrays pointers arduino

我将如何创建一系列变量,如.....

int incColor, c0, c1, c2, c3, c4, c5 = 0;
int circleArray[11][9] = { {c5, c5, c5, c5, c5, c5, c5, c5, c5}, 
                             {c4, c4, c4, c4, c4, c4, c4, c4, c4}, 
                             {c4, c3, c3, c3, c3, c3, c3, c3, c4}, 
                             {c4, c3, c2, c2, c2, c2, c2, c3, c4}, 
                             {c4, c3, c2, c1, c1, c1, c2, c3, c4}, 
                             {c4, c3, c2, c1, c0, c1, c2, c3, c4}, 
                             {c4, c3, c2, c1, c1, c1, c2, c3, c4}, 
                             {c4, c3, c2, c2, c2, c2, c2, c3, c4}, 
                             {c4, c3, c3, c3, c3, c3, c3, c3, c4}, 
                             {c4, c4, c4, c4, c4, c4, c4, c4, c4}, 
                             {c5, c5, c5, c5, c5, c5, c5, c5, c5} };

因此,稍后在代码中我将能够像这样解决它们......

void circle(uint16_t mode) 
{
  switch (mode)
  {
     case 0:
     c0 = random(255);
     break; 
     case 1:
     c0 = incColor;
     incColor++;
     break;
  }
  for (int x = 0; x < 11; x++)
  {
     for (int y = 0; y < 9; y++)
    {
       strip.setPixelColor(x, y, Wheel(circleArray[x][y]));
    } 
  }
  c5 = c4;
  c4 = c3;
  c3 = c2;
  c2 = c1;
  c1 = c0;

}

上面的代码不起作用,我测试了c5和circleArray [0] [0]

c5 = 34
circleArray[0][0] = 0

circleArray [0] [0]应该和c5一样是我想的但是由于某种原因这个值没有得到设定......

有人知道我在这里做错了吗?

~~~~~~~~~~~~~~ EDIT ~~~~~~~~~~~~~~~~~

固定!!感谢@ sj0h帮助我看到一个更简单的解决方案,所以现在我可以把它变成......

int c[6] = {0, 0, 0, 0, 0, 0};    
int  circleArray[11][9] = {  {5, 5, 5, 5, 5, 5, 5, 5, 5},
                             {4, 4, 4, 4, 4, 4, 4, 4, 4}, 
                             {4, 3, 3, 3, 3, 3, 3, 3, 4}, 
                             {4, 3, 2, 2, 2, 2, 2, 3, 4}, 
                             {4, 3, 2, 1, 1, 1, 2, 3, 4}, 
                             {4, 3, 2, 1, 0, 1, 2, 3, 4}, 
                             {4, 3, 2, 1, 1, 1, 2, 3, 4}, 
                             {4, 3, 2, 2, 2, 2, 2, 3, 4}, 
                             {4, 3, 3, 3, 3, 3, 3, 3, 4}, 
                             {4, 4, 4, 4, 4, 4, 4, 4, 4}, 
                             {5, 5, 5, 5, 5, 5, 5, 5, 5} };

void circle(uint16_t mode) 
{
  switch (mode)
  {
     case 0:
     c[0] = random(255);
     break; 
     case 1:
     c[0] = incColor;
     incColor++;
     break;
  }
  for (int x = 0; x < 11; x++)
  {
     for (int y = 0; y < 9; y++)
    {
       strip.setPixelColor(x, y, Wheel(c[circleArray[x][y]]));
    } 
  }
  c[5] = c[4];
  c[4] = c[3];
  c[3] = c[2];
  c[2] = c[1];
  c[1] = c[0];

}

进入现实生活中的应用......

www.famousmods.com for more info

2 个答案:

答案 0 :(得分:3)

参考文献可以做你想做的事:

int &circleArray[11][9] = ......

这将使circleArray成为引用数组而不是复制值。


标准不支持

编辑:,并且支持依赖于编译器。

使用指针代替,你会有

int *circleArray[11][9] = {{&c5, &c5, .....

然后将所有circleArray接受更改为* circleArray [x] [y]而不是circleArray [x] [y]。


另一种可能更通用的方法是将颜色数组索引保存在circleArray中:

int incColor;
int cn[6] = {0,0,0,0,0,0};
int circleArray[11][9] = { {5,5,5,5,5,5,5,5,5},
                           {4,4 .....

然后c0将变为c [0],您将访问数组值,如

cn[circleArray[x][y]]

你也可以使circleArray uint8_t保存一些空间,因为所有条目都适合一个字节。

答案 1 :(得分:0)

circleArray[0][0]c5不同,因为在分配时,从一个变量复制

要将一个位置别名为多个变量,您应该使用指针或引用。