前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数组a[i]与i[a]相等之术

数组a[i]与i[a]相等之术

作者头像
Qt君
发布2019-07-15 14:53:44
6510
发布2019-07-15 14:53:44
举报

为什么数组值a[1]与数组值1[a]是相等的?为什么会出现这种的奇怪现象?

定义数组a

int a[5] = {0, 1, 2, 3, 4};

数组a[1] = 1[a]

程序运行的结果是它们相等的。客官别急先看推导。

  • a[1] = *(a+1) 将数组下标取值转换为指针形式取值;
  • *(a+1) = *(1+a) 这个是交换对调位置,也是相等的;
  • *(1+a) = 1[a] 但是最后这个就有点难以明白了,其实这是编译器的问题,在编译器面前,他们都会被解析为取a的首地址+偏移地址所在的内存值。

同理a[i] = i[a]

  • a[i] = *(a+i)
  • *(a+i) = *(i+a)
  • *(i+a) = i[a]

原因

编译器会翻译到数组首地址+偏移地址的方式,所以就支持了该写法,但是一般不会这样用,因为a[i]的方式更加直观。

数组的另类用法

"0123456789abcdef"[value%16]

  • "0123456789abcdef"[0]即为取字符串数组"0123456789abcdef"的首地址'0';
  • 该数组主要的功能为将整型值转换为16进制数;
  • 该数组看起来很怪,但在某些场合上还真使用到,就是一些加密算法(md5)或对性能要求较高的场合,可读性好。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

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

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

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