我觉得这样的表达式应该是无效的,但我能够编译它并得到答案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
在序列点之间被修改多次。例如,this compiler给出 4 作为答案,因为它将增量放在赋值之后。如果增量是在赋值之前,另一个合理的答案是 6。但是,正如您所发现的,编译器可以随意生成答案,包括 5。
参见here有关序列点和未定义行为的更多信息。
关于c - 为什么 i=2+2*i++ 给出错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154848/