【问题标题】:Indexing an int? How does this work? [duplicate]索引一个int?这是如何运作的? [复制]
【发布时间】:2015-07-02 15:00:58
【问题描述】:

以下代码

#include<stdio.h>

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

打印-30。如何?为什么?

【问题讨论】:

  • cout&lt;&lt;-2[arr]; 我绝不会在代码审查中让它通过...无缘无故地令人困惑。
  • 我谦虚地不同意这个骗局。这个问题在涉及的运算符优先级和对 UB 的误解方面存在很大差异,如(现已删除)cmets 所示。我要求重新考虑此案。

标签: c++ arrays


【解决方案1】:

在你的情况下,

 cout<<-2[arr];

翻译成

cout<<-(arr[2]);

因为,

  1. array indexing boils down to pointer arithmatic,所以数组名和索引值的位置可以在符号上互换。

    链接的答案是 C 语言,但也适用于 C++。

  2. 关于显式()s,您可以在此处查看operator precedence

【讨论】:

    【解决方案2】:

    看看这句话

    cout << -2[arr];
    

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

    2[arr] == arr[2]
    

    也就是说operator[]- 具有higher precedence。所以你实际上是在尝试调用

    -(arr[2])
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-22
        • 2011-05-10
        • 2015-02-27
        • 2023-03-20
        相关资源
        最近更新 更多