查看原文
其他

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

编程珠玑 2022-09-10
来源:公众号【编程珠玑】
作者:守望先生
ID:shouwangxiansheng


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


关注公众号【编程珠玑】,获取更多Linux/C/C++/算法/计算机基础/工具等原创技术文章。后台免费获取经典电子书和视频资源


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存