打印
[其他]

C问题

[复制链接]
336|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
BettyBerry|  楼主 | 2020-10-17 14:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int m=0, n=2, k=1;
k = (m++)&&(++n);
printf("%d, %d, %d", k, m, n);

这里为什么输出的n是2.并没有改变

使用特权

评论回复
评论
zyj9490 2020-10-20 09:04 回复TA
第二项是算术与还是逻辑与? 
沙发
fair2817| | 2020-10-18 23:47 | 只看该作者
本帖最后由 fair2817 于 2020-10-18 23:56 编辑

执行m++时,是后置++运算符,是使用m的0值参与运算后加了1。在m使用0进行与逻辑运算时,由于m为0时为假,逻辑结果直接为假,后面的++n不会被执行。最后的结果就是k为0,m为1,n为2。有三种解决方案,一是把m改为非0;二是将++n与m++调换位置;三是将m++改为++m。

使用特权

评论回复
板凳
x史可法| | 2020-10-20 21:43 | 只看该作者
&&时前面已经0就没必要运行后面++n

使用特权

评论回复
地板
kaloulin| | 2020-10-22 10:59 | 只看该作者
楼主把m++改为++m试下

使用特权

评论回复
5
734774645| | 2020-10-28 21:42 | 只看该作者
纠结这个没必要吧,写代码时候不要这么写就是了。

使用特权

评论回复
6
laocuo1142| | 2020-11-26 15:27 | 只看该作者

楼主把m++改为++m试下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

162

帖子

0

粉丝