array[offset] 和 offset[array] 为什么是等效的?
一段代码
#include <stdio.h>
int main()
{
int array[3]={0,1,2};
printf("%d,%d,%d",*array,array[1],2[array]);
return 0;
}
输出结果:
0,1,2
2[array]是什么鬼?
*array 等价于 array[0] 或者说 array 等价于 &array[0], 这个不用解释了吧。
那 2[array] 是什么鬼?
从输出结果不难猜出 2[array] 等价于 array[2],
但---这是为什么?
方括号的本质
方括号(square brackets)[]操作符的本质是什么呢?
编译器在分析表达式E1[E2] 时,方括号在语义上界定了参数 E1 和 E2,
然后将分离的参数组合成表达式 (*((E1)+(E2)))
,本质上仍然是指针的加法。
所以array[2]等价于(*((array)+(2)))
,
而2[array]等价于(*((2)+(array)))
我是如何知道的?
参考The C Programming Language
的 6.5.2.1 Array subscripting
后
这可能不是什么编程技巧,甚至一辈子也用不上的技巧,但是你需要理解它从何而来,才能更深入的理解c语言。
EOF
评论框君很顽皮,需要科学上网才能看到哦!~
关注微信公众号(MarIxs)也能联系到我哦!