你见过数组的这种骚操作吗?

  • 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,后台回复可获取电子版,仅供学习交流。