| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1589 人关注过本帖
标题:自加自减?????
只看楼主 加入收藏
阳光110
Rank: 1
来 自:四川
等 级:新手上路
帖 子:25
专家分:1
注 册:2011-10-21
结帖率:100%
收藏
已结贴  问题点数:1 回复次数:12 
自加自减?????
1:
int i=6;
printf("%d,%d,%d,%d,%d",++i,i++,i--,--i,-i--);
6,5,5,5,-6
为什么会是++i=6?开头呢
2:
int i=6;printf("%d",++i);
7
1与2的++i;为什么不一样呀??
2011-12-28 00:14
yu376021
Rank: 2
等 级:论坛游民
帖 子:41
专家分:68
注 册:2011-11-11
收藏
得分:0 
你重新编译一下,要不重建个工程
2011-12-28 00:24
st3110103939
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-12-14
收藏
得分:0 
还有那个5是增么来的,能说明白点吗?
2011-12-28 11:37
阳光110
Rank: 1
来 自:四川
等 级:新手上路
帖 子:25
专家分:1
注 册:2011-10-21
收藏
得分:0 
回复 3楼 st3110103939
就是前边++i,i++,i--,--i,-i--,对应的值!
2011-12-28 15:25
kennel2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:157
注 册:2011-12-13
收藏
得分:0 
经过我参考网上的资料 ,还有自己的实践给兄弟一个满意的解释:
首先咱先看下下面这个小程序
#include <stdio.h>
int main()
{
    int a = 5, b = 2;
    printf("%d %d\n", b = a + 1, a = a + 1);
    //输出7 6 ,而不是你想象的6 6
}
这是因为,对于VC++6.0中的规则如下:
1、printf函数的执行顺序是由右到左的
2、前自增运算符(++i)先加1,再使用i,此时i已经加了1;
3、后自增运算符(i++)先使用i,再加1,注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的,(VC++6.0比较变态)
也就是说上面这个小程序的执行顺序是
a = a + 1 -> a = 6
b = a + 1 -> b = 7
接下来再看你的程序就比较好理解了.
#include <stdio.h>
int main()
{
    int i = 6;
    printf("%d\n", ++i);//7,这个没问题

    i = 6;
    printf("%d %d %d %d %d", ++i, i++, i--, --i, -i--);
    //6 5 5 5 -6
    printf("%d", i); //5
    getchar();
    return 0;
}
首先我的机子上没有VC6.0,所以,我试着进行推导一下
1.执行-i--,得到i = 6, 输出-6,--将会在print完了之后才会显现作用,先记着
2.执行--i,得到i = 5,输出5
3.执行i--,得到i = 5,输出5,--将会在print完了之后才会显现作用,先记着
4.执行i++,得到i = 5,输出5,++将会在print完了之后才会显现作用,先记着
5.执行++i,得到i = 6,输出6
整个执行完之后,i值为5.

别忘了分昂!希望满意!
收到的鲜花
  • qq5037587622011-12-30 03:56 送鲜花  3朵   附言:我很赞同
2011-12-28 17:20
zaq2008
Rank: 2
等 级:论坛游民
帖 子:23
专家分:13
注 册:2010-8-14
收藏
得分:0 
不应该过分最求弄懂这种问题
楼主估计是谭浩强的书看多了。。
此类有争议的问题 其结果只和编译器有关
比如说 楼主的代码给我的GCC编译 其结果应该为5,3,4,5,-6
2011-12-28 17:47
kennel2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:157
注 册:2011-12-13
收藏
得分:0 
楼主没给分意思意思呀..尴尬..
2011-12-28 19:19
梦想未来
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2011-12-9
收藏
得分:0 
好像和编译器有关  不同的编译器  显示的结果应该不一样
2011-12-28 20:59
阳光110
Rank: 1
来 自:四川
等 级:新手上路
帖 子:25
专家分:1
注 册:2011-10-21
收藏
得分:0 
回复 7楼 kennel2009
切,现在闹分危机,没办法呀!!
2011-12-29 21:30
阳光110
Rank: 1
来 自:四川
等 级:新手上路
帖 子:25
专家分:1
注 册:2011-10-21
收藏
得分:0 
回复 5楼 kennel2009
谢咯
2011-12-29 21:31
快速回复:自加自减?????
数据加载中...
 
   



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

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