知道为什么下面的代码片段打印2而不是3

时间:2014-02-20 02:25:40

标签: c++ c if-statement post-increment

我期待这个代码片段打印3,因为if条件为false并且y ++将执行,但它打印2,任何想法为什么......谢谢!!

int x = 3;
int y = 2;

printf("%d\n", (x<y) ? x++ : y++);

//这打印2

5 个答案:

答案 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。