为什么会......
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
我在codeblocks中创建了另一个项目文件,编译并获得了这个
1
1
-1
3
4
5
我试图找到有类似问题的帖子,但我找不到。 这对我来说没有意义
答案 0 :(得分:3)
使用负索引访问 C ++ 中的数组是undefined behavior,有效索引为:
int a[5];
将是0 to 4
。
如果我们查看 1 段落中的C ++标准草案8.3.4
Arrays 草案:
[...]如果常量表达式的值为N,则该数组具有N个元素,编号为0到N-1,[...]
答案 1 :(得分:2)
您的代码显示未定义的行为:-2
不是int[5]
数组的有效索引。这种数组的有效索引是0到4。
在这种特殊情况下,偶然发生i
位于内存中的2 * sizeof(int)
正好位于a
的第一个元素之下,所以{{1}恰好是a[-2]
的别名。