5

可能重复:
在 C 数组中,为什么这是真的?a[5] == 5[a]

这怎么可能是有效的 C++?

void main()
{
  int x = 1["WTF?"];
}

在 VC++10 上编译,在调试模式下,x语句后的值为 84。

这是怎么回事?

4

3 回答 3

9

数组下标运算符是可交换的。它等价于int x = "WTF?"[1];Here, "WTF?"is an array of 5 chars(它包括空终止符),并[1]为我们提供了第二个字符,即'T'- 隐式转换为int它的值 84。

题外话:代码片段不是有效的 C++,实际上 -main必须返回int

您可以在此处阅读更深入的讨论:在 C 数组中,为什么这是真的?a[5] == 5[a]

于 2013-01-17T12:04:39.757 回答
3
int x = 1["WTF?"];

等于

int x = "WTF?"[1];

84是“T”ASCII码

于 2013-01-17T12:03:47.807 回答
1

The reason why this works is that when the built-in operator [] is applied to a pointer and an int, a[b] is equivalent to *(a+b). Which (addition being commutative) is equivalent to *(b+a), which, by definition of [], is equivalent to b[a].

于 2013-01-17T12:29:24.133 回答