【问题标题】:Fetching a 2 dimensional array from a 3 dimensional array in Arduino从 Arduino 中的 3 维数组中获取 2 维数组
【发布时间】:2014-04-09 22:14:05
【问题描述】:

我目前正在尝试使用 random 函数从 3-D 数组中分配给 2-D 数组。因此:

byte blocks[7][4][2] = {{{0,0},{1,0},{2,0},{3,0}}};
byte currentBlock[4][2] = blocks[random(0,6)];

我在尝试编译时收到“错误:无效的数组分配”。

为什么要这样做,我怎样才能实现我想要的?我知道我的 3-D 阵列中只有一件事,但如果我不能做到这一点,我宁愿不要浪费时间进入其余部分。

谢谢!

第二次冲击

【问题讨论】:

    标签: arrays random multidimensional-array arduino


    【解决方案1】:

    对于大多数用途而言,复制数组的内容似乎并不是最好的方法(除非您特别需要一个独立的副本,您可以在不影响原始文件的情况下对其进行修改)。

    一般来说,更好的方法是存储一个指向您要使用的数组部分的指针。例如:

    byte blocks[7][4][2] = {{{0,0},{1,0},{2,0},{3,0}}, ... };
    byte (*currentBlock)[2] = blocks[random(0, 6)];
    

    这将使currentBlock 指向blocks 内的随机4x2 数组。您将以与常规数组完全相同的方式访问它。唯一的区别是您使用currentBlock 所做的任何更改也会影响blocks

    【讨论】:

    • 是的,我希望能够更改currentBlock 的内容。我希望能够旋转块。
    • 当您说“旋转”时,如果您的意思是移动它以指向不同的块,那没问题。您可以重新分配指向数组不同部分的指针,而不会影响其他任何内容。您唯一需要注意的是,对实际值本身的任何更改都会影响blocks
    • 不,我的意思是物理更改值,使其旋转。我正在为定制的 arduino 盾牌做俄罗斯方块克隆。所以它需要旋转实际的像素。最糟糕的是,我需要存储每个可能的旋转位置以节省时间,但这可能会占用太多空间。
    【解决方案2】:

    经过大量搜索和东西。我发现,似乎是一个解决方案。使用memcpy

      memcpy(blocks[currentBlock, random(0,6)], sizeof(blocks[k]));
    

    似乎可以解决问题。不幸的是,这仅适用于编译,我不知道它是否会运行良好,因为我没有我的 arduino,但如果它工作正常,我将使用它作为接受的答案。

    【讨论】:

    • 你弄错了来源和目的地;即用currentBlock交换blocks[random(0,6)]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多