整数用c ++中的字符串索引
可能重复:
在C数组中,为什么这是真的? a [5] == 5 [a]
这怎么可能是有效的C ++?
void main()
{
int x = 1["WTF?"];
}
在VC ++ 10上编译并且在调试模式下,语句后x
的值是84。
这是怎么回事?
数组下标运算符是可交换的。 它相当于int x = "WTF?"[1];
在这里, "WTF?"
是一个包含5个char
的数组(它包含空终止符), [1]
给我们第二个字符,即'T'
- 隐式转换为int
它给出值84。
Offtopic:代码片断不是有效的C ++,实际上 - main
必须返回int
。
你可以在这里阅读更深入的讨论:在C数组中,为什么这是真的? a [5] == 5 [a]
int x = 1["WTF?"];
等于
int x = "WTF?"[1];
84是“T”ascii码
之所以这么做,是因为当内置的operator []
应用于指针和int时, a[b]
等价于*(a+b)
。 哪一个(加法是可交换的)等价于*(b+a)
,根据定义[]
,它等价于b[a]
。