2013-08-06 98 views
-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. 它是什么计算?
+1

这个问题和Java *中着名的* == vs等于是地球上最大的两个问题。 – Maroun

+1

'undefined behaviour' for the win – user2485710

+0

我想知道为什么问题论文有这些类型的问题? – P0W

回答

0

这似乎是具有序列中的点是在表达b=++a + ++a;

即无关紧要,第一++a是否评估第一或第二++a首先计算在任一情况下a递增两次,然后将+运算符生效,所以最终方程式为b = 2 + 3;b = 3 + 2,因此b = 5。

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

Blastfurnace在+操作员生效之前对两者进行评估的评论都是正确的,现在我认为这很明显。

也就是说,+的优先级低于++a。可以认为,这种说法并不含糊,因为将评估顺序(R到L或L到R,优先顺序)切换为相同的答案。

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

+0

...或两侧在添加之前进行评估并且结果为“3 + 3”。无论哪种方式这个代码是可怕的,并没有试图推理它。 – Blastfurnace

+0

在我的c编译器中,b的值显示为6.这里两个共享一个名为“a”的内存。对于第一个++ a a = 2的值,对于第二个++ a,a = 3,然后b = 3 + 3 = 6。 – Arijit

+0

@Arijit,我同意后,实际尝试它。 – JackCColeman

相关问题