64,654
社区成员
发帖
与我相关
我的任务
分享
但是这么写的时候运行起来没问题,不知道为什么反过来的时候就出错了。。
但是这么写的时候运行起来没问题,不知道为什么反过来的时候就出错了。。
nums[i+1] == nums[i++]
是错的
这是未定义行为
前面忽略了还有更高优先级的运算符,经过反汇编看到运算符解释执行的过程
先执行==两边的[]表达式,从数组取完值存放于连续两个内存空间后再执行i++,最后执行==运算符并根据结果跳转
https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin 可以看一下运算符的结合方向 ==运算符的结合方向是从左至右,也就是,先算左边,再取右边 这样算出来左边的等价于 while(nums[i+1] == nums[i]) ++i; 而右边的等价于 while(nums[i] == nums[i+2]) ++i;
https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin
可以看一下运算符的结合方向
==运算符的结合方向是从左至右,也就是,先算左边,再取右边
这样算出来左边的等价于
while(nums[i+1] == nums[i])
++i;
而右边的等价于
while(nums[i] == nums[i+2])
++i;