【发布时间】:2017-11-06 01:26:50
【问题描述】:
#include <iostream>
using namespace std;
int main()
{
int arr[3] = { 10, 20, 30 };
cout << arr[-2] << endl;
cout << -2[arr] << endl;
return 0;
}
输出:
4196160
-30
此处arr[-2] 超出范围且无效,导致未定义行为。
但是-2[arr] 的计算结果为-30。为什么?
arr[-2]不等于-2[arr]吗?
【问题讨论】:
-
只是为了使问题正确(删除UB),您可以定义
int *arr2 = arr + 2并将arr2与-2一起使用。 -
我无法摆脱这种感觉,您应该能够通过查看输出来轻松自己解决这个问题。好吧,至少你问了一个很好的问题。
-
这个问题没有显示出任何研究成果(从投反对票的原因)
-
虽然 Chris 的回答是正确的,但假设它曾 等同于 (-2)[arr]:为什么您认为在这种情况下打印 -30 与行为未定义?
-
@LyingOnTheSky 这是 undefined 行为。 arr[-2] 完全可以接受同时打印
4196160和-30,清除数组,然后将 cout::operator
标签: c++ arrays undefined-behavior