为什么i = 2 + 2 * i ++会给出错误的结果?

时间:2013-08-09 20:10:10

标签: c

我觉得这样的表达应该是无效的,但我能够编译它并得到答案5。 最后我觉得即使答案应该是4而不是5。

int main(void)
{
  int i=1;

  // how is the next line evaluated ie in what sequence??

  i=2+2*i++;
  printf("%d",i);
  return 0;
}

我得到的输出是5.我无法理解它应该如何赋予价值。

1 个答案:

答案 0 :(得分:4)

这是未定义的行为,因为i在序列点之间被多次修改。例如,this compiler给出4作为答案,因为它在赋值后放置增量。另一个合理的答案是6,如果增量在分配之前。但是,正如您所发现的那样,允许编译器根据需要做出答案,包括5.

有关序列点和未定义行为的更多信息,请参阅here