C++,为什么多维数组的一个元素的增加似乎在增加另一个?

标签 c++ arrays

这可能不优雅。主要是因为我对 C++ 比较陌生,但我正在编写的这个小程序在这里遇到了麻烦。

我不明白。我误解了数组吗?编辑后的代码是:

int diceArray [6][3][1] = {};

...

}else if (y >= xSuccess || x >= xSuccess){

// from here...

    diceArray[2][1][0] = diceArray[2][1][0] + 1;
    diceArray[2][1][1] = diceArray[2][1][1] + 1;

// ...to here, diceArray[2][2][0] increases by 1. I am not referencing that part of the array at all. Or am I?

}

通过使用注释,我将罪魁祸首追溯到第二个表达式。如果我注释掉第一个 diceArray[2][2][0] 不会改变。

为什么 diceArray[2][1][1] = diceArray[2][1][1] + 1 导致 diceArray[2][2][0] 递增?

我试过了..

c = diceArray[2][1][1] + 1;

diceArray[2][1][1] = c;

..作为解决方法,但它是一样的。它将 diceArray[2][2][0] 增加了一个。

最佳答案

您的索引超出范围。如果我声明这样一个数组

int data [3];

那么有效的索引是

data[0]
data[1]
data[2]

与此类似的是你声明

int diceArray [6][3][1]
                     ^

然后尝试分配给

diceArray[2][1][0]
                ^

diceArray[2][1][1]     // This is out of range
                ^

由于您正在分配超出范围,由于指针算法,您实际上是由于跨步等原因分配给下一个维度。

关于C++,为什么多维数组的一个元素的增加似乎在增加另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41957631/

相关文章:

c++ - Boost 的链接器选项

c++ - 如何创建变量数组 Arduino

javascript - Array.indexOf 在某些 IE 版本中抛出错误

arrays - 数组的元素类型不完整。这是什么意思?

c++ - 如何声明其类没有默认构造函数的对象数组?

c++ - 偶尔的段错误

c++ - 用 C++ 声明的 COM 接口(interface)

c - 在 C 中帮助处理这个参差不齐的数组/子字符串程序?

javascript - 找不到预加载的图像 (emscripten)

c - 将 Int 和 Char 存储在全局数组中