相同运算符优先级的结合性 -- *start++

Associativity of the same operator precedence -- *start++

为什么会出现下面的表达式:

total += *start++;

评估为:

total += (*start)++;

而不是:

total += *(start++); // though this doesn't really matter either it would be the same

++(post固定增量)和*(解引用具有相同的优先级并且从右到左关联,所以为什么++ post首先评估修复?


或者,postfix 是否在序列点之后求值,因此:

total += *++start

计算结果为:

total += *(++start)

但是因为 post修复发生在:

total += *start++

计算结果为:

total += (*start)++;

换句话说,从右到左的结合性在上面的表达式中并不重要,因为即使 post-fix 在表达式求值时也是在 not?

之后求值的

后缀 ++ 运算符 的优先级高于解引用运算符 *。所以表达式解析为:

total += *(start++);

可能会让您感到困惑的是,后缀 ++ 运算符的结果是操作数 递增之前。实际增量作为表达式的未排序副作用发生。

所以这个表达式采用 start 的原始值,取消引用它,并将该值添加到 total。当表达式被完全计算时,start 递增。

请注意,这不同于:

total += (*start)++;

因为这会增加 start 指向的内容而不是 start 本身。