免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5737 | 回复: 26
打印 上一主题 下一主题

[C] 表达式arr[i++]中的[]运算符是在i的左边还是右边? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-15 14:09 |只看该作者 |倒序浏览
  1. int arr[3] = {0, 0, 0};
  2. int i = 0;

  3. arr[++i] += 1;
复制代码
[]运算符的结合性是从左到右,那[]是在i的左边还是右边?还有i的值为什么只增加了一次而不是两次? 对于表达式
  1. x += 1
复制代码
不是等价于
  1. x = x +1;
复制代码
吗?上面的表达式为什么不是
  1. arr[++i] = arr[++i] + 1;
复制代码

论坛徽章:
0
2 [报告]
发表于 2014-10-15 14:37 |只看该作者
这个问题想了两天也没搞懂,看了看C标准说对于符合赋值表达式 a =op b, a 只求值一次不知道是什么意思。

论坛徽章:
0
3 [报告]
发表于 2014-10-15 15:36 |只看该作者
难道这个问题简单的大家都太简单了大家都不屑回答吗?为什么我两天也没弄明白啊

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2014-10-15 15:37 |只看该作者
arr[++i] += 1;  等于

++i;
arr[i] = arr[i] + 1;

论坛徽章:
0
5 [报告]
发表于 2014-10-15 15:40 |只看该作者
hellioncu 发表于 2014-10-15 15:37
arr[++i] += 1;  等于

++i;

大哥,[]运算符的结合性是从左到右,这句话是什么意思?对于arr[++i],他是在i的左边还是右边?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2014-10-15 15:43 |只看该作者
xxNote 发表于 2014-10-15 15:40
大哥,[]运算符的结合性是从左到右,这句话是什么意思?对于arr[++i],他是在i的左边还是右边?


我看书少,这个我不懂。

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
7 [报告]
发表于 2014-10-15 16:03 |只看该作者
易读性这么差,就算写出来没BUG也分分钟被训,个人感觉这种东西实在无意义

论坛徽章:
0
8 [报告]
发表于 2014-10-15 16:23 |只看该作者
Dannysd 发表于 2014-10-15 16:03
易读性这么差,就算写出来没BUG也分分钟被训,个人感觉这种东西实在无意义

这是C专家编程里面看到的类似的例子,这个例子彻底把我搞蒙了。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
9 [报告]
发表于 2014-10-15 16:31 |只看该作者
lz自己单步调试一下吧。

论坛徽章:
0
10 [报告]
发表于 2014-10-15 16:42 |只看该作者
本帖最后由 xxNote 于 2014-10-15 16:43 编辑
fender0107401 发表于 2014-10-15 16:31
lz自己单步调试一下吧。

我看了看汇编代码,知道arr[++i] += 1;是按
  1. i++;
  2. arr[i] =  arr[i] + 1;
复制代码
这样编译的,就是不理解为什么这样编译
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP