黑马程序员技术交流社区
标题:
关于 ++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