为什么会出现下面的表达式:
total += *start++;
评估为:
total += (*start)++;
And not:
total += *(start++); // though this doesn't really matter either it would be the same
The ++
(后缀增量)和*
(取消引用具有相同的优先级并从右到左关联,所以为什么不++
postfix 首先评估?
或者,后缀是否在序列点之后求值,等等:
total += *++start
将评估为:
total += *(++start)
但因为后缀发生在:
total += *start++
将评估为:
total += (*start)++;
换句话说,从右到左的关联性在上面的表达式中并不重要,因为即使是后缀也是在表达式求值期间而不是之后求值的?
后缀++
操作员does优先级高于解引用运算符*
。所以表达式解析为:
total += *(start++);
可能会让您感到困惑的是后缀的结果++
运算符是操作数before它是递增的。实际的增量是作为表达式的未排序副作用而发生的。
所以这个表达式取原始值start
,取消引用它,并将该值添加到total
。当表达式被完全求值时,start
是递增的。
请注意,这不同于:
total += (*start)++;
因为这会增加什么start
指向而不是start
itself.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)