黑马程序员技术交流社区

标题: 关于 ++a和a++的疑惑,求清晰的解答,网上找了很多答案还是很迷糊 [打印本页]

作者: jingkai    时间: 2015-5-15 08:27
标题: 关于 ++a和a++的疑惑,求清晰的解答,网上找了很多答案还是很迷糊
作业里的一道题,是这样的
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但是看到这题又疑惑了,网上的答案也跟我掌握的一样,但是为啥结果不对呢。求解答。。

作者: 丶浩浩丶    时间: 2015-5-15 19:17
这个的关键是在&&

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

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

既然x++==2这个条件不成立,系统就会直接结束if语句,不会再去执行后面的++y==2这个条件.
所有y也就没有机会去++   y始终都是初始化时的1,没有改变.

作者: 丶浩浩丶    时间: 2015-5-15 19:29
如果是这样
这个是++x了,不是你题目那个x++了,注意下
if(++x==2 || ++y==2}{
    x =7;
}

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

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

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

这个我们学习时称为短路.
作者:   张恒宇    时间: 2015-5-15 22:09
本帖最后由   张恒宇 于 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 22:15
丶浩浩丶 发表于 2015-5-15 19:29
如果是这样
这个是++x了,不是你题目那个x++了,注意下
if(++x==2 || ++y==2}{

受教了。
作者: 梦初醉    时间: 2015-5-16 00:09
顶一下吧!大神已经讲解的很详细了!
作者: wangvsv    时间: 2015-5-16 01:24
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-16 11:26
是优先级的问题吧
作者: wangguanyang    时间: 2015-5-18 07:43
楼上的分析的很好,我就不多说什么了
作者: jingkai    时间: 2015-5-22 07:47
丶浩浩丶 发表于 2015-5-15 19:29
如果是这样
这个是++x了,不是你题目那个x++了,注意下
if(++x==2 || ++y==2}{

3Q大神,懂了
作者: Residual_mem    时间: 2015-5-22 13:23
长知识了。。
作者: Emma    时间: 2015-5-22 14:38
你好努力啊,看你老是发帖问问题,学习的好快
作者: Huylens    时间: 2015-5-22 14:57
这个你要看看&&和&的区别在哪里,两个不是一样的。
作者: 唐僧    时间: 2015-5-22 21:58
++在前,先加;++在后后加
&和&&的区别是后面是短路与,即&&前面的错了,后面就不执行了
作者: beijingdbm    时间: 2015-5-22 22:11
x++ 先计算后使用,++x 先使用在计算
作者: kansiliyundi    时间: 2015-5-22 22:24
++a是个表达式   ++a是说假如a=1 ++a这个表达式变成2 a也变成2   a++是表达式的值不变 还是1 a加1 变为2




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2