| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1597 人关注过本帖, 1 人收藏
标题:令人费解的++i问题
只看楼主 加入收藏
nextleave
Rank: 2
等 级:论坛游民
帖 子:52
专家分:92
注 册:2011-9-12
收藏
得分:0 
第一个输出结果还好理解,第二个很难理解。我试了下,发现在一个语句(一个语句应加着重号)里同一个变量自加两次以上,只有前两次的的结果能累加,后面出现的自加都是单独算的。如楼主的实验中,10就是两个3和一个4 的和。如果有四个y的自加,则结果应是15=3+3+4+5,如果是六个自加的话就是21=3+3+4+5+6。依次类推。
2011-10-03 22:12
qwerty089850
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-10-3
收藏
得分:0 
一个例子
int y=1;
如果printf("%d",y++) 此时屏幕上显示的是1
但如果printf("%d",++y) 此时屏幕上显示的是2

y++是先执行命令后再做自加1
++y是在执行之前就做自加1

另外11楼的看法我也验证了一下。结果一样!好破烂的设定

[ 本帖最后由 qwerty089850 于 2011-10-3 22:27 编辑 ]
2011-10-03 22:17
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
按你 这答案给 你解答  我 的 编译器是自右向左   自增自减你 应该懂把
 #include void main()
{
int x,y,b1,b2; x=y=1;
 b1=(x++)+(x++)+(x++);    1+1+1
 b2=(++y)+(++y)+(++y);     5+3+2
printf("b1=%d\nb2=%d\n",b1,b2);
 }
运行结果:b1=3,b2=10;

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-10-03 23:12
q332010372
Rank: 2
等 级:论坛游民
帖 子:52
专家分:61
注 册:2010-7-27
收藏
得分:0 
int a = 10,c=0;
            c = ++a + --a + a++ + a-- - a++;
            printf(c);
很多初学者都以为是29(虽然我也是初学者 = =!),但其实是32,计算机会根据优先级从左到右计算,首先
1,计算++a的值,由于a的初始值是10,所以++a的值为11,a的值为11
2,计算+ --a,当前a=11,+ --a,先执行--a,a的值变更为10,然后++a + --a= 11+10=21
3, 计算+ a++ ,当前a=10,+ a++, 先执行+a,a的值依然为10,然后++a + --a + a++ =11+10+10=31
4, 计算+ a-- ,当前a=10, +a--, 先执行+a, a的值依然为10,然后 ++a + --a + a++ + a-- =11+10+10+10=41
5, 计算- a++, 当前a=10, -a++, 先执行-a,a的值依然为10,然后++a + --a + a++ + a-- - a++=11+10+10+10-10=31
最后执行 a++的+1、a--的-1、a++的+1,也就是31+1-1+1=32,a的值经过+1、-1、+1后也就变成了11

也就是++a先进行a=a+1,a++先进行+a,再进行+1

 int a, b = 1;
 a = (++b) + (++b) + (++b); // 2 + 3 + 4
 printf(a);
输出 9
没学过C,还真不知道C的 a=b=c;是什么意思
2011-10-04 02:37
parden
Rank: 2
等 级:论坛游民
帖 子:29
专家分:36
注 册:2011-9-21
收藏
得分:0 
把b2=(++y)+(++y)+(++y);扩展一下。

#include<stdio.h>
int main(void)
{
int x,y,z,w,b1,b2,b3,b4;
w=x=y=z=1;
b1=++x;
b2=(++y)+(++y);
b3=(++z)+(++z)+(++z);
b4=(++w)+(++w)+(++w)+(++w);
printf("x=%d b1=%d\n",x,b1);
printf("y=%d b2=%d\n",y,b2);
printf("z=%d b3=%d\n",z,b3);
printf("w=%d b4=%d\n",w,b4);
return 0;
}
结果如下:
   
C:\Documents and Settings\adminstrator>C:\Dev-Cpp\1.exe
x=2 b1=2
y=3 b2=6
z=4 b3=10
w=5 b4=15
你也可以求b5。有个规律,自己去发现吧。
2011-10-04 13:58
fedcab123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:100
注 册:2011-9-3
收藏
得分:0 
这东西看从哪面算的,有的编译器是从右向左,有的从左向右,算出来是2个结果,这种蛋疼的题没什么实际作用的感觉
2011-10-04 14:45
wxfcyuyan
Rank: 2
来 自:中国安徽
等 级:论坛游民
帖 子:14
专家分:29
注 册:2011-9-2
收藏
得分:0 
LZ,我用c编译后结果为3和10,,但是我在eclipse中用java写相同的运算,结果为6和9,,,,按照我们正常的思维,结果就是b1=1+2+3,b2=2+3+4,,但是为什么不同的编译器结果不同呢,这个我也不清楚,你可以用java试试。
2011-10-05 14:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我发誓:以后绝对不理睬此类问题,学死你们得了。

授人以渔,不授人以鱼。
2011-10-05 14:36
felixlx
Rank: 2
等 级:论坛游民
帖 子:6
专家分:20
注 册:2011-10-6
收藏
得分:0 
我来给大家讲讲吧。i++指的是在下一轮中加1,而++i指的是在本次运算中+1,所以(++Y)+(++Y)+(++Y)=2+3+4=10
2011-10-06 12:38
别时茫茫
Rank: 2
来 自:安徽蚌埠
等 级:论坛游民
威 望:1
帖 子:29
专家分:72
注 册:2011-10-5
收藏
得分:0 
没必要去纠结这个东西!
2011-10-06 16:42
快速回复:令人费解的++i问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034947 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved