我期待这个代码片段打印3,因为if条件为false并且y ++将执行,但它打印2,任何想法为什么......谢谢!!
int x = 3;
int y = 2;
printf("%d\n", (x<y) ? x++ : y++);
//这打印2
答案 0 :(得分:2)
x++
和y++
是后增量。也就是说,它们返回变量的当前值,然后添加一个变量。
预增量为++x
或++y
。那些增量然后返回新值。
在编写循环控件时,前后增量(和-decrement)都很有用,这就是C支持两者的原因。
(原来,如果我没记错的话,C只支持预增量和后减量,因为在它开发的机器上碰巧有指令封装了这些行为。但是当C转移到其他系统时,人们开始注意到他们想要两者的前置和后置,这是概括的。)
请注意,这意味着c++
语言被错误命名。它应该被称为++c
- 我们希望在之前使用它改进,而不是之后!
答案 1 :(得分:1)
这是因为y++
返回y
的值然后增加它。
如果您放置++y
,它会首先增加y
的值,然后将其返回。
答案 2 :(得分:1)
最后评估++
运算符;这被称为“后增量”。所以,这个:
int x = 3;
int y = 2;
printf("%d\n", (x<y) ? x++ : y++);
相当于:
int x = 3;
int y = 2;
printf("%d\n", (x<y) ? x : y);
y++;
(由于三元条件,从未达到x++
。)另一方面,这个:
int x = 3;
int y = 2;
printf("%d\n", (x<y) ? ++x : ++y);
会在将其各自的值返回y
之前递增printf()
,因此逻辑将是:
printf("%d\n", (3<2) ? 3 : 3); // prints 3
答案 3 :(得分:0)
由于您使用后期增量y++
,因此将首先使用y
的值并递增。也就是说,printf
将在递增操作之前传递值,在您的情况下,y
在递增之前为2,并且将打印2。
答案 4 :(得分:0)
在完成此行的所有其他操作后,您应该考虑x ++和y ++。因此,打印y然后递增x和y。