我有这段代码,但我不知道它是如何运作的。
main()
{
int i=1;
i= ++i + ++i + ++i;
printf("%d",i);
}
我试图编译它并得到输出 10 但我不知道如何。我发现在执行加法运算之前,两个 ++i 被赋值为 3,一个 ++i 被赋值为 4。我无法弄清楚在这种情况下增量运算符是如何工作的。请帮我解决这个问题。
我有这段代码,但我不知道它是如何运作的。
main()
{
int i=1;
i= ++i + ++i + ++i;
printf("%d",i);
}
我试图编译它并得到输出 10 但我不知道如何。我发现在执行加法运算之前,两个 ++i 被赋值为 3,一个 ++i 被赋值为 4。我无法弄清楚在这种情况下增量运算符是如何工作的。请帮我解决这个问题。
行为未定义..如果您在 SO 上搜索,会有很多类似的帖子。
例如x = x++ + ++x 的评估顺序是什么?是?或者为什么这些构造(使用++)是未定义的行为?和更多。
最后,只是一个意见/评论:我认为没有人会提倡编写这种类型的代码,因为它也很难理解(因此是您提出问题的原因)。
我很确定你不应该那样做。基本上,不要在同一个表达式中多次修改一个值。否则会调用“未定义的行为”,这是一种奇特的说法,即“编译器不保证会发生什么。
(从技术上讲,规则是不要在相同的序列点之间多次修改一个值)