C 为什么i=2+;2*i++;给出错误的结果?
我觉得这样的表达式应该是无效的,但我能够编译它并得到答案5。 最后,我觉得即使答案是4,也应该是5C 为什么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作为答案,因为它将增量放
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
有关序列点和未定义行为的更多信息,请参阅