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

根据(C99,6.5.2.1p2),C中[]下标运算符的定义是

null
 E1[E2] is identical to (*((E1)+(E2)))

编译器在内部使用指针算法来访问数组元素。由于适用于二进制+运算符的转换规则,如果E1是数组对象(相当于指向数组对象初始元素的指针),E2是整数,则E1[E2]指定E1的第E2个元素(从零开始计数)。

因此 a[b] 定义如下:

a[b] == *(a + b)

所以 将评估为

a[8] == *(a + 8)

这里,a是指向数组第一个元素的指针,a[8]是距离a远8个元素的元素的值,与*(a+8)和相同 8[a] 将评估以下内容,这意味着两者相同。

8[a] == *(8 + a)

所以通过添加 交换性质 , a[8]==8[a]

显示上述结果的示例程序:

// C program to illustrate
// a[i] == i[a] in arrays
#include <stdio.h>
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7};
printf ( "a[5] is %d" , a[5]);
printf ( "5[a] is %d" , 5[a]);
return 0;
}


输出:

a[5] is 6
5[a] is 6

本文由 曼迪星 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享