相同运算符优先级的结合性 -- *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
本身。
为什么会出现下面的表达式:
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
本身。