在C ++中访问带负索引的二维数组

时间:2017-12-13 06:13:35

标签: c++ arrays

我在C ++中有二维数组,如下所示:

int array[2][5] = {
    {1,2,3,4,5},
    {6,7,8,9,10}
};

当我访问数组[0] [4]的索引时,结果值当然是5。 但是当我尝试访问像这个数组[1] [ - 1]这样的数组索引时,我仍然感到困惑, 结果值也是5。

任何人都可以解释这个吗? 谢谢

2 个答案:

答案 0 :(得分:2)

实际上是未定义的行为。你看到5的原因或多或少都是偶然的。原因是您正在创建在内存中按顺序创建的固定长度的二维整数数组。因此[1][-1]在某些(可能是大多数?)实现上等同于[0][4]的内存位置。在内存中,它看起来像你的情况下的序列1,2,3,4,5,6,7,8,9,10。但是,不能保证或定义多维数字固定长度数组将像您观察到的那样始终是连续的。

答案 1 :(得分:2)

它与如何计算索引有关。内存本身就是一个单词数组。当你使用二维索引[i] [j]时,它被映射到内存i*size2+j(如果数组的大小是[size1] [size2])

所以当你为[0][4][1][-1]计算时,你会得到相同的值(0 * 5 + 4 = 4,1 * 5-1 = 4)  two-dimensional array