存储新元素时,二维数组会删除元素本身

时间:2019-02-06 20:44:20

标签: c++ c arrays multidimensional-array arduino

我有一个二维数组存储[x] [y],想为每个x值存储8个不同的y值。由于某种原因,我可以读出数组中的特定位置,例如[48] [7],并且在填充数组中的其他空格后,[48] [7]的值已经改变,即使我从未碰过也很难。

int storage[127][7];

void store(){
 storage[48][0] =0b01111110;
 storage[48][1] =0b01111110;
 storage[48][2] =0b11100011;
 storage[48][3] =0b11010011;
 storage[48][4] =0b11001011;
 storage[48][5] =0b11000111;
 storage[48][6] =0b01111110;
 storage[48][7] =0b01111110;


   Serial.println(storage[48][7], BIN); // returns 01111110

 storage[49][0] =0b00000000;
 storage[49][1] =0b11000001;
 storage[49][2] =0b11000001;
 storage[49][3] =0b11111111;
 storage[49][4] =0b11111111;
 storage[49][5] =0b00000001;
 storage[49][6] =0b00000001;
 storage[49][7] =0b00000000;

   Serial.println(storage[48][7], BIN); // returns 0
}

根据我存储值的顺序,其中一些值会互相删除。

为什么我突然丢失数据?

编辑:我没有用正确的大小初始化数组。我应该用8而不是7。我必须学习数组从0开始计数,但是在初始化dont时!

1 个答案:

答案 0 :(得分:2)

您正在定义一个行大小为7的2D数组,但是您只能访问一行的8个元素:

 int storage[127][7];

 storage[48][0] =0b01111110;
 ...
 storage[48][7] =0b01111110;

请注意,0..7实际上是8个元素,而不是7个元素。因此,您必须将storage定义为...

 int storage[127][8];

现在可以讨论int storage[127][7];storage[48][7] =0b01111110是否为未定义的行为;

然而,最可能的行为是storage[48][7]映射到与storage[49][0]相同的内存地址。因此,当您分配storage[49][0] =0b00000000;时,您也会“同时”写入storage[48][7],它将变成0b0000000