i=2;
i= ++i + ++i + ++i;
printf(i)
请给出解释的输出?
我得到的答案是12但应该是13。
根据 C 标准,您的代码的行为是未定义的,因为您不允许在同一个表达式中多次使用预增量运算符。输出可以是任何东西。
有关该主题的更全面处理,请参阅此问题的答案。
虽然行为未定义,但在 UR 的情况下,它已被执行,考虑到解析是从左开始的,i = 5 + 4 + 3 = 12
为了解释,i = (++i) + (++i) + (++i) 现在 i = 2,所以首先 ++i 扩展为 3 并且 i 变为 i=3 i = (++i) + ( ++i) + 3
现在 i = 3,所以 ++i 扩展为 4 并且 i 变为 i=4 i = (++i) + 4 + 3
现在 i = 4,所以首先 ++i 扩展为 4 并且 i 变为 i=5 i = 5 + 4 + 3