1

我是 C 语言的新手,所以请 sum1 帮助我。交流代码编写

int i=3;
printf("%d",++i + ++i);

编译器给出 O/P =9。如何?

4

1 回答 1

4

结果未定义。您在表达式中多次修改变量(或者更准确的序列点)。

在序列点之间多次修改变量是未定义的,所以不要这样做。

它可能是您的编译器,因为这种特殊情况决定评估 ++i + ++i

  • 增加最后一个++i,产生 4,留下 i 为 4
  • 增加第一个++i,产生 5,将 i 保留为 5(如上一步将 i 保留为 4,将其增加到 5)
  • 将两个值相加,4 + 5。

另一个编译器,或者如果您更改优化级别,或者如果您稍微更改代码,可能会产生不同的输出。

于 2010-09-28T12:59:39.537 回答