根据(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