你见过数组的这种骚操作吗?
- 2019 年 11 月 13 日
- 筆記
看到朋友圈对一段代码感到很惊奇,这里也分享一下: 代码如下:
#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]的?
是不是对等的间接表达式是这样的:
*(a + 1)
既然如此,那么它写成这样是不是也可以?
*(1+a)
再转换回去:
1[a]
由于这样的写法对于编译器来说是没有差别的,除了优先级以外,它的操作和间接访问过程是类似的。
以上内容来自《C和指针》8.1.2,后台回复可获取电子版,仅供学习交流。