这怎么可能是有效的C ++?
void main()
{
int x = 1["WTF?"];
}
在VC ++ 10上编译并在调试模式下,语句后x
的值为84。
发生了什么?
答案 0 :(得分:9)
数组下标运算符是可交换的。它相当于int x = "WTF?"[1];
这里,"WTF?"
是一个包含5个char
的数组(包含空终止符),[1]
为我们提供了第二个字符,即{{1} - 隐式转换为'T'
,它给出了值84。
Offtopic:代码段无效C ++,实际上 - int
必须返回main
。
您可以在此处阅读更深入的讨论:In C arrays why is this true? a[5] == 5[a]
答案 1 :(得分:3)
int x = 1["WTF?"];
等于
int x = "WTF?"[1];
84是“T”ascii代码
答案 2 :(得分:1)
这样做的原因是当内置运算符[]
应用于指针和int时,a[b]
等同于*(a+b)
。哪个(加法是可交换的)相当于*(b+a)
,根据[]
的定义,它等同于b[a]
。