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

2019-11-13 19:22:31 浏览数 (1)

看到朋友圈对一段代码感到很惊奇,这里也分享一下: 代码如下:

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

0 人点赞