免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xxNote
上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2014-10-15 17:06 |只看该作者
个人感觉应该是这样的,
arr[++i] = arr[++i] + 1;
计算是:
1: ++i
2:arr[i] + 1
3:++i
4arr[i] = 2的结果,


而arr[++i] += 1;
计算是:

1:++i
2:arr[i] = arr[i] + 1
关键好像在于arr[]被读了几次。

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亚洲杯之中国
日期:2015-04-22 15:52:45
12 [报告]
发表于 2014-10-15 17:36 |只看该作者
xxNote 发表于 2014-10-15 14:09
[]运算符的结合性是从左到右,那[]是在i的左边还是右边?还有i的值为什么只增加了一次而不是两次? 对于表达 ...


汗, 楼主问的这些破问题....
i += 1和i = i + 1只是效果相同, 没有正式的语法说expr1 += expr2就等同于expr1 = expr1 + expr2, 所以别用表达式乱替换.

结合性从左向右, 你问[]在i的左边右边的, 实在听不懂......
私下揣摩圣意, 应该是想形象地知道像"a+b"这样, a是左操作数, b是右操作数?
你理解成i是右操作数就是了.

论坛徽章:
0
13 [报告]
发表于 2014-10-15 18:19 |只看该作者
本帖最后由 xxNote 于 2014-10-15 18:28 编辑
hanxin83 发表于 2014-10-15 17:36
汗, 楼主问的这些破问题....
i += 1和i = i + 1只是效果相同, 没有正式的语法说expr1 += expr2就等同于 ...
额,你这样说我就明白了,我确实是想知道知道像"a+b"这样, a是左操作数, b是右操作数,这样的话,arr[i++]的左操作数是arr,右操作数是i++了

论坛徽章:
0
14 [报告]
发表于 2014-10-15 18:25 |只看该作者
fsfilove 发表于 2014-10-15 17:06
个人感觉应该是这样的,
arr[++i] = arr[++i] + 1;
计算是:

arr[++i] = arr[++i] + 1;应该是未定义的吧,在两个序点之间对一个变量进行了两次修改

论坛徽章:
0
15 [报告]
发表于 2014-10-15 18:54 |只看该作者
那你说x += 1 和x = x + 1区别是啥回复 14# xxNote


   

论坛徽章:
0
16 [报告]
发表于 2014-10-15 18:55 |只看该作者
本帖最后由 xxNote 于 2014-10-15 19:01 编辑
fsfilove 发表于 2014-10-15 17:06
个人感觉应该是这样的,
arr[++i] = arr[++i] + 1;
计算是:


刚才测试了一下,果然如此,在Ubuntu和Windows里面都是Gcc编译器结果也不同

论坛徽章:
0
17 [报告]
发表于 2014-10-15 18:58 |只看该作者
fsfilove 发表于 2014-10-15 18:54
那你说x += 1 和x = x + 1区别是啥回复 14# xxNote

我觉得,这两个应该是效果一样的吧,唯一不同的时候就是当x是类似arr[i++]这种复合表达式的时候

论坛徽章:
0
18 [报告]
发表于 2014-10-15 18:59 |只看该作者
你的程序怎么显示i undefined回复 16# xxNote


   

论坛徽章:
0
19 [报告]
发表于 2014-10-15 19:00 |只看该作者
fsfilove 发表于 2014-10-15 18:59
你的程序怎么显示i undefined回复 16# xxNote

嗯,刚才测试的是arr[++i] = arr[++i] + 1;这句肯定是未定以的啊

论坛徽章:
0
20
发表于 2014-10-15 19:01
效果是一样的,但是执行的顺序是不一样的,并且速度也不一样。

x = x + 1,这种x被读取了两次

回复 17# xxNote


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP