知道为什么下面的代码片段打印 2 而不是 3
Any idea why the code snippet below prints 2 and not 3
我希望这个代码片段打印 3,因为 if 条件为 false 并且 y++ 将执行,但它打印 2,知道为什么......谢谢!!
int x = 3;
int y = 2;
printf("%dn", (x<y) ? x++ : y++);
这打印 2
x++
和y++
是后递增的。也就是说,它们返回变量的当前值,然后向其添加一个。
预增量将是++x
或++y
。这些增量,然后返回新值。
在编写循环控件时,前递增和后递增(和递减)都是有用的东西,这就是 C 支持两者的原因。
(最初,如果我没记错的话,C 只支持前递增和后递减,因为碰巧在它开发的机器上有封装这些行为的指令。但是随着 C 语言迁移到其他系统,并且当人们开始注意到他们想要两者的 pre 和 post,这被普遍化了。
请注意,这意味着c++
语言的名称错误。它应该被称为++c
- 我们希望在使用它之前对其进行改进,而不是之后!
这是因为y++
返回y
的值,然后增加它。
如果你放++y
它会先增加y
的值,然后返回它。
最后
计算++
运算符;这称为"后增量"。所以,这个:
int x = 3;
int y = 2;
printf("%dn", (x<y) ? x++ : y++);
相当于这个:
int x = 3;
int y = 2;
printf("%dn", (x<y) ? x : y);
y++;
(由于三元条件,x++
永远不会达到。另一方面,这:
int x = 3;
int y = 2;
printf("%dn", (x<y) ? ++x : ++y);
在将其各自的值返回给 printf()
之前递增y
,因此逻辑将是:
printf("%dn", (3<2) ? 3 : 3); // prints 3
由于您使用后递增y++
,因此将首先使用y
的值并递增。也就是说,printf
将在增量操作之前传递值,在您的情况下y
增量之前为 2,将打印 2。
在完成此行的所有其他操作后,您应该考虑 x++ 和 y++。因此,打印 y,然后递增 x 和 y。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 打印数字图案
- 为什么我的C++代码在以下打印链表的代码片段中显示分段错误?
- 知道为什么下面的代码片段打印 2 而不是 3