-6
i=2;

i= ++i + ++i + ++i;

printf(i)

请给出解释的输出?
我得到的答案是12但应该是13

4

2 回答 2

5

根据 C 标准,您的代码的行为是未定义的,因为您不允许在同一个表达式中多次使用预增量运算符。输出可以是任何东西。

有关该主题的更全面处理,请参阅此问题的答案。

于 2013-03-12T11:22:36.490 回答
-4

虽然行为未定义,但在 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

于 2013-03-12T11:48:56.090 回答