📜  为什么在C C++数组中a [i] == i [a]?(1)

📅  最后修改于: 2023-12-03 15:06:16.888000             🧑  作者: Mango

为什么在C/C++数组中a[i] == i[a]?

在C/C++中,数组是一个非常基础的数据结构。在使用数组时,有时候会出现比较奇怪的语法,比如 a[i] == i[a],这个语法是什么意思?为什么它是合法的?本文将向您解释这个问题。

首先让我们看一下这个语法的起源。在C/C++中,使用下标访问数组元素的语法是 array[index],这个语法与指针语法 *(array + index) 是等价的。

因此,可以将 a[i] 翻译成 *(a + i),将 i[a] 翻译成 *(i + a)。我们发现,*(a + i)*(i + a) 是完全等价的,因为加法是可交换的。因此,a[i] == i[a] 是一个合法的表达式,它的值是 true。

那么这个特性有什么作用呢?其实,这个特性并没有什么实际的用处,只是有时候可以让代码看起来更简洁。比如下面的代码:

int a[10];
for (int i = 0; i < 10; i++) {
    a[i] = i;
}

可以改写成:

int a[10];
for (int i = 0; i < 10; i++) {
    i[a] = i;
}

两段代码的作用完全相同,只是语法不同。但是,第二段代码有时候可能会让阅读者感到困惑,因此并不推荐使用。

总结起来,a[i] == i[a] 这个特性只是一个有趣的语法现象,它的存在并没有什么实际的作用。在实际编程中,请使用标准的数组访问语法,即 array[index]