-3
int main()
{
    int b=0,a=1;//initialize a and b
    b=++a + ++a;// calculate assign the value of b
    print f("%d",b);
    return 0;
}
  1. b的值是多少?
  2. 它的计算方法是什么?
4

2 回答 2

2

这是未定义的行为。缺少序列点

有关更多信息,请查看此处output-of-multiple-post-and-pre-increments-in-one-statement

于 2013-08-06T11:05:13.263 回答
0

似乎有一个序列点在表达式中并不重要b=++a + ++a;

也就是说,无论是先++a评估第一个还是先评估第二个++a,在任何一种情况下a都会递增两次,然后+运算符生效,因此最终的方程要么是b = 2 + 3;b = 5,要么是b = 3 + 2b = 5。

当我回到家时,我会用我的 C 编译器试试这个。

Blastfurnace 关于在+运营商生效之前进行评估的评论是正确的,现在我考虑一下,很明显。

也就是说,+优先级低于++a。可以争辩说,这个陈述并不是模棱两可的,因为将评估顺序(R 到 L 或 L 到 R,两者都与优先级有关)会导致相同的答案。

没有人会声称这是编写良好的代码,在讨论的几个要点上很有趣,但不应该被认可。

于 2013-08-07T00:14:24.083 回答