0

为什么这...

int a[5];
a[-2] = 1;
a[-1] = 2;
a[0] = 3;
a[1] = 4;
a[2] = 5;

cout << a[-2] << endl <<endl;

for(int i=-2 ; i<=2 ; i++)
{
    cout << a[i] << endl;
}

...输出这个?

1

-2
2
3
4
5

我在代码块中创建了另一个项目文件,编译并得到了这个

1

1
-1
3
4
5

我试图找到有类似问题的帖子,但找不到。这对我来说没有意义

4

2 回答 2

3

在C++中使用负索引访问数组是未定义的行为,有效索引为:

int a[5];

0 to 4

如果我们查看第1段中的 C++ 标准部分8.3.4 Arrays草案说:

[...] 如果常量表达式的值为 N,则数组有 N 个元素,编号为 0 到 N-1,[...]

于 2013-11-03T18:26:53.940 回答
2

您的代码表现出未定义的行为:-2不是int[5]数组的有效索引。此类数组的有效索引为 0 到 4。

在这种特殊情况下,它恰好恰好i位于内存2 * sizeof(int)中的第一个元素下方的偏移处a,因此a[-2]恰好是 的别名i

于 2013-11-03T18:26:39.573 回答