Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么i=2+;2*i++;给出错误的结果?_C - Fatal编程技术网

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

C 为什么i=2+;2*i++;给出错误的结果?,c,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。我无法理解它应该如何给出值。这是未定义的行为,因为在序列点之间,I被多次修改。例如,给出4作为答案,因为它将增量放

我觉得这样的表达式应该是无效的,但我能够编译它并得到答案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。我无法理解它应该如何给出值。

这是未定义的行为,因为在序列点之间,
I
被多次修改。例如,给出4作为答案,因为它将增量放在赋值之后。另一个合理的答案是6,如果增量在分配之前。但是,正如您所发现的,编译器可以根据需要生成任何答案,包括5

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