【问题标题】:Why does x[y] == y[x] in c++? [duplicate]为什么 x[y] == y[x] 在 c++ 中? [复制]
【发布时间】:2011-11-18 16:25:54
【问题描述】:

可能重复:
In C arrays why is this true? a[5] == 5[a]

有人告诉我...我一开始不相信他们,但它确实有效。如果 x 和 y 在整个代码中没有改变,为什么会这样:

int x [5] = { 0,1,2,3,4};
int y = 3;

if(x[y] == y[x]){
    cout << "Why..." << endl;
}

x 数组在索引 y 中的值如何 = x 索引在数组 y 中的值?但是没有 y 数组。

【问题讨论】:

  • 这已经在各种常见问题解答中以及在此处的 SO 上被询问和回答了无数次。 C常见问题链接:c-faq.com/aryptr/joke.html

标签: c++ c arrays


【解决方案1】:

总是正确的(对于普通运算符==)

a[i]  --> *(a+i) --> *(i+a) --> i[a]

因为 int 是内在的并且具有可交换运算符 ==,所以这将始终为真

【讨论】:

  • @delnan:这怎么不是问题?两个表达式都是同一个指针加法的指针解引用。
  • 更重要的是,因为int* 没有重载的operator[]
【解决方案2】:

因为以下所有内容都是相同的:

x[y] == y[x] == *(x+y) == *(y+x)

【讨论】:

    【解决方案3】:

    因为x[y] 只是*(x + y) 的另一种说法,与*(y + x) 相同。

    【讨论】:

    • 你的意思是“...*(x + y) 的另一种说法,与*(y + x) 相同。
    • 不,是*(x + y)&amp;x[y] 会说 x + y
    猜你喜欢
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多