| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 412 人关注过本帖
标题:有人问过的问题,没听懂,求教
只看楼主 加入收藏
st3110103939
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-12-14
结帖率:25%
收藏
已结贴  问题点数:10 回复次数:3 
有人问过的问题,没听懂,求教
int i=6;
printf("%d,%d,%d,%d,%d",++i,i++,i--,--i,-i--);
6,5,5,5,-6
能有个高手说明白点吗,第一个5是怎么来的
2011-12-28 11:32
燃高
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:140
注 册:2011-12-13
收藏
得分:3 
从括号最右边开始计算!!!首先是最后一个%d=-6 然后是i自减 然后是i自减,倒数第二个%d=5;依次计算!!
2011-12-28 12:12
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:3 
跟着学习,
应该是从右向左计算.
--和++在右边的只在语句结束后生效.在左边的先计算,在执行语句.
这样那个就是5了
2011-12-28 14:58
kennel2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:157
注 册:2011-12-13
收藏
得分:3 
经过我参考网上的资料 ,还有自己的实践给兄弟一个满意的解释:
首先咱先看下下面这个小程序
#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.

如果满意,别忘了分昂!
2011-12-28 19:14
快速回复:有人问过的问题,没听懂,求教
数据加载中...
 
   



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

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