索引一个int?这是如何运作的?

时间:2015-07-02 15:00:59

标签: c++ arrays

以下代码

#include<stdio.h>

int main()
{
    int arr[] = {10,20,30};
    cout << -2[arr];
    return 0;
}

打印-30。怎么样?为什么呢?

3 个答案:

答案 0 :(得分:12)

在你的情况下,

 cout<<-2[arr];

被翻译为

cout<<-(arr[2]);

因为,

  1. array indexing boils down to pointer arithmatic,因此,数组名称和索引值的位置可以用符号互换。

    链接的答案在C中,但对C ++也有效。

  2. 关于明确的(),您可以在此处查看operator precedence

答案 1 :(得分:4)

看一下这句话

cout << -2[arr];

首先,要知道它看起来很奇怪the following is true

2[arr] == arr[2]

据说operator[]higher precedence而不是-。所以你实际上是在尝试调用

-(arr[2])

答案 2 :(得分:3)

在C和C ++中,2[arr]实际上与arr[2]相同。

由于运算符优先级,-2[arr]被解析为-(2[arr])。这意味着整个表达式的计算结果是否定arr的第3个元素,即-30