| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8369 人关注过本帖, 3 人收藏
标题:一个简单程序,我运行的结果和理论不一致,大家分析问题在哪?
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
这帖子竟然写了七页...不环保啊...

I have not failed completely
2012-11-03 19:29
xiaowu88910
Rank: 1
等 级:新手上路
帖 子:13
专家分:9
注 册:2012-10-27
收藏
得分:0 
自增自减的运算规则跟你的pc系统环境有关,有些是自左向右,有些是自右向左,所以问题出在这里
2012-11-04 13:43
时间流走记忆
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-4
收藏
得分:0 
我运行的结果是4,2,4,3,程序从右向左执行,++i,--i是在用i之前自加自减,i++,i--是在用i之后自加自减。
2012-11-04 14:38
henanstudy
Rank: 1
等 级:新手上路
帖 子:6
专家分:6
注 册:2012-11-4
收藏
得分:0 
VC下 最后输出语句的i,是从右往左运算的
第一次,i=3

最后的语句:i++,i此时输出为3,
执行i--时,原先的i=3经过最后一个i++后已经变为了4,所以输出4
同理,输出--i时,4-1-1=2
最后,2+1=3
书本上面写的比较复杂,其实在实际用的时候,没有人会这样写的,书上的例子参考参考就是
2012-11-04 19:50
we1194848357
Rank: 2
等 级:论坛游民
帖 子:4
专家分:11
注 册:2012-11-4
收藏
得分:0 
是3 2 3 3,因为printf()函数的参数是从右至左运算的,所以printf("%d\t%d\t%d\t%d\n",++i,--i,i--,i++);是先运算i++,此时i还是为3,再是i--,i还是为3,再是--i,i为2,再是++i,i为3,然后再输出是从左至右输出的,所以为3 2 3 3,而用四个printf()时,输出为4 3 3 2,这个就不解释了。
2012-11-04 20:38
jgao123
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-5
收藏
得分:0 
为什么要删,程序员不只是要会编代码,更要知道为什么会这样,而不是那样。不但知其然,更要知其所以然!不回答也就算了,还搞破坏!
2012-11-05 21:34
ithaibo
Rank: 2
等 级:论坛游民
帖 子:52
专家分:50
注 册:2012-3-30
收藏
得分:0 
c语言里的自增自减,具体的优先情况与编译器有关。如果想探个究竟,去了解一下编译器的有关知识。
2012-11-07 09:30
cjbs10086
Rank: 2
等 级:论坛游民
帖 子:32
专家分:45
注 册:2012-10-13
收藏
得分:0 
3 2 3 3
2012-11-08 12:13
王攀峰
Rank: 1
等 级:新手上路
帖 子:5
专家分:4
注 册:2012-11-8
收藏
得分:0 
回复 楼主 greennet111
printf("%d\t%d\t%d\t%d\n",++i,--i,i--,i++);
这跟编译器有关系。
C中规定:printf函数内有表达式,遵从右结合:即计算顺序为i++,i--,--i,++i.(注意++i和i++的区别)。
下面是跟编译器有关:           (<-------)
在Turbo C中:i=3,如printf("%d,%d",++i,i++)函数,(i++)=3,(i=4);(++i)=5,(i=5);所以输出 5,6;
所以:(i++)=3,(i=4);(i--)=4,(i=3);
(--i)=2,(i=2);(++i)=3,(i=3).根据printf的输出顺序所以为:3 2 4 3
VC编译器中:i=3,如printf("%d,%d",++i,i++)函数,(i++)=3,(当前i值不变仍为3,即this->i=3,但执行printf()函数体完后自行加1,);表达式(++i)=4,(当前i值加1,即this->i=3+1=4,++i值为4),此时执行完函数:(this->i)++,所以i=5.输出为 4,3(实际上可以看出this->i的值就是i++等表达式的值)
所以(i++)=3,(this->i=3);(i--)=3,(this->i=3);(--i)=2,(this->i=2);(++i)=3,(this->i=3)所以3 2 3 3,执行完毕printf()函数执行(this->i)++,
(this->i)--,即i=3。与编译器内部规定计算顺序有关。
不过,表达式多次使用a++形式容易出错,一个好的程序员应该避免这种情况。附上关于++运算的文章,对你应该很有帮助
附:http://wenku.baidu.com/view/1c5de1e1524de518964b7d8e.html
2012-11-09 14:28
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
在同一条语句里出现   类似

i++, --i, ++i;
不同编译器给出的结果不一样。

如果要深究  那么请查阅编译原理。

自由、民主、宪政!
2012-11-09 14:41
快速回复:一个简单程序,我运行的结果和理论不一致,大家分析问题在哪?
数据加载中...
 
   



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

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