可能的重复项:
在 C 数组中,为什么会这样?a[5] == 5[a]
这怎么可能C++有效?
void main()
{
int x = 1["WTF?"];
}
在 VC++10 上,这将编译,在调试模式下,语句后 x
的值为 84。
这是怎么回事?
数组下标运算符是可交换的。它相当于 int x = "WTF?"[1];
在这里,"WTF?"
是一个 5 char
s 的数组(它包括 null 终止符(,[1]
给了我们第二个字符,即 'T'
- 隐式转换为 int
它给出的值 84。
题外话:代码片段无效 C++,实际上 - main
必须返回int
.
你可以在这里阅读更深入的讨论:在C数组中为什么这是真的? a[5] == 5[a]
int x = 1["WTF?"];
等于
int x = "WTF?"[1];
84是"T"ASCII码
原因是,当内置运算符[]
应用于指针和整数时,a[b]
等效于*(a+b)
。哪个(加法是可交换的(等价于*(b+a)
,根据[]
的定义,它等价于b[a]
。