前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你见过数组的这种骚操作吗?

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

作者头像
编程珠玑
发布2019-11-13 19:22:31
3440
发布2019-11-13 19:22:31
举报
文章被收录于专栏:编程珠玑编程珠玑

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

代码语言: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("%d\n",i[a]);
    }
    return 0;
}

注意看printf那一行,发现什么了没有?竟然有i[a]这样的操作?然后你运行一下还会发现,结果完全正常。

如何理解呢?

首先问一个问题,你是如何理解a[1]的?

是不是对等的间接表达式是这样的:

代码语言:javascript
复制
*(a + 1)

既然如此,那么它写成这样是不是也可以?

代码语言:javascript
复制
*(1+a)

再转换回去:

代码语言:javascript
复制
1[a]

由于这样的写法对于编译器来说是没有差别的,除了优先级以外,它的操作和间接访问过程是类似的。

以上内容来自《C和指针》8.1.2,后台回复可获取电子版,仅供学习交流。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程珠玑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档