A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

作业里的一道题,是这样的
int x = 1,y = 1;
if(x++==2 && ++y==2) {
    x =7;
}
printf("x=%d, y=%d\n", x, y);
我得出的结果是:x=2,y=2
可是一看答案我就凌乱了 答案是 x=2,y=1
这怎么可能
本来感觉自己已经掌握了
x++和++x但是看到这题又疑惑了,网上的答案也跟我掌握的一样,但是为啥结果不对呢。求解答。。

15 个回复

倒序浏览
这个的关键是在&&

int x = 1,y = 1;
if(x++==2 && ++y==2}

这个时候条件成立吗?
不成立,因为x等于1,要先比较完x==2后,再去给x++.

既然x++==2这个条件不成立,系统就会直接结束if语句,不会再去执行后面的++y==2这个条件.
所有y也就没有机会去++   y始终都是初始化时的1,没有改变.
回复 使用道具 举报
如果是这样
这个是++x了,不是你题目那个x++了,注意下
if(++x==2 || ++y==2}{
    x =7;
}

这样判断是不是++x就等于2了.

是的话也就会直接判断++x==2这个条件成立, 因为是||,
所有只要一个条件成立就直接执行下面的if里面的语句,也不会执行++y==2.

所以这个时候x=7,y=1.

这个我们学习时称为短路.
回复 使用道具 举报
本帖最后由   张恒宇 于 2015-5-15 22:13 编辑

这是if的条件判断。。。。。if(x++==2)是先调用x后在自加也就是调用的时候x=1,此时不符合if的条件&&是和的意思也就两个条件必须都符合显然x=1不符合条件就跳出if条件句执行自己的运算x自加的到x=2,。。。所以输出x=2,y=1;
回复 使用道具 举报
丶浩浩丶 发表于 2015-5-15 19:29
如果是这样
这个是++x了,不是你题目那个x++了,注意下
if(++x==2 || ++y==2}{

受教了。
回复 使用道具 举报
顶一下吧!大神已经讲解的很详细了!
回复 使用道具 举报
a++和++a的区别,a++是先赋值,在++。++a是先++,后赋值。只要记住这句话就不会晕。

你因为是x++==2,他的原型是先x==2在++,++y是先++后等于,应为x++==2的运行是先x=2在++的,不成立2==2,所以直接跳出。x++==2不成立x==2,在++就等于2,所以x=2,y=1.
给你画个图你就明白了,你仔细想想我说的第一句话,你就会明白了。
给分吧。
回复 使用道具 举报
是优先级的问题吧
回复 使用道具 举报
楼上的分析的很好,我就不多说什么了
回复 使用道具 举报
丶浩浩丶 发表于 2015-5-15 19:29
如果是这样
这个是++x了,不是你题目那个x++了,注意下
if(++x==2 || ++y==2}{

3Q大神,懂了
回复 使用道具 举报
长知识了。。
回复 使用道具 举报
Emma 中级黑马 2015-5-22 14:38:01
12#
你好努力啊,看你老是发帖问问题,学习的好快
回复 使用道具 举报
这个你要看看&&和&的区别在哪里,两个不是一样的。
回复 使用道具 举报
++在前,先加;++在后后加
&和&&的区别是后面是短路与,即&&前面的错了,后面就不执行了
回复 使用道具 举报
x++ 先计算后使用,++x 先使用在计算
回复 使用道具 举报
++a是个表达式   ++a是说假如a=1 ++a这个表达式变成2 a也变成2   a++是表达式的值不变 还是1 a加1 变为2
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马