我觉得这样的表达应该是无效的,但我能够编译它并得到答案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.我无法理解它应该如何赋予价值。
答案 0 :(得分:4)
这是未定义的行为,因为i
在序列点之间被多次修改。例如,this compiler给出4作为答案,因为它在赋值后放置增量。另一个合理的答案是6,如果增量在分配之前。但是,正如您所发现的那样,允许编译器根据需要做出答案,包括5.
有关序列点和未定义行为的更多信息,请参阅here。