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;
}
- b的值是多少?
- 它是什么计算?
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;
}
这似乎是具有序列中的点是在表达b=++a + ++a;
即无关紧要,第一++a
是否评估第一或第二++a
首先计算在任一情况下a
递增两次,然后将+
运算符生效,所以最终方程式为b = 2 + 3;
或b = 3 + 2
,因此b = 5。
当我回家时,我会用我的C编译器试试这个。
Blastfurnace在+
操作员生效之前对两者进行评估的评论都是正确的,现在我认为这很明显。
也就是说,+
的优先级低于++a
。可以认为,这种说法并不含糊,因为将评估顺序(R到L或L到R,优先顺序)切换为相同的答案。
没有人会声称这是写得很好的代码,在讨论的几个点上很有趣,但不是应该被认可的东西。
...或两侧在添加之前进行评估并且结果为“3 + 3”。无论哪种方式这个代码是可怕的,并没有试图推理它。 – Blastfurnace
在我的c编译器中,b的值显示为6.这里两个共享一个名为“a”的内存。对于第一个++ a a = 2的值,对于第二个++ a,a = 3,然后b = 3 + 3 = 6。 – Arijit
@Arijit,我同意后,实际尝试它。 – JackCColeman
这个问题和Java *中着名的* == vs等于是地球上最大的两个问题。 – Maroun
'undefined behaviour' for the win – user2485710
我想知道为什么问题论文有这些类型的问题? – P0W