看到朋友圈对一段代码感到很惊奇,这里也分享一下: 代码如下:
代码语言:javascript复制#include<stdio.h>
int main(void)
{
int a[] = {1,2,3,4};
int len = sizeof(a)/sizeof(a[0]);
int i =0;
for(;i < len;i )
{
printf("%dn",i[a]);
}
return 0;
}
注意看printf那一行,发现什么了没有?竟然有i[a]这样的操作?然后你运行一下还会发现,结果完全正常。
如何理解呢?
首先问一个问题,你是如何理解a[1]的?
是不是对等的间接表达式是这样的:
代码语言:javascript复制*(a 1)
既然如此,那么它写成这样是不是也可以?
代码语言:javascript复制*(1 a)
再转换回去:
代码语言:javascript复制1[a]
由于这样的写法对于编译器来说是没有差别的,除了优先级以外,它的操作和间接访问过程是类似的。
以上内容来自《C和指针》8.1.2,后台回复可获取电子版,仅供学习交流。