| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1773 人关注过本帖, 1 人收藏
标题:关于++a和a++的一些看法
只看楼主 加入收藏
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:18 
关于++a和a++的一些看法
前几天无意中看到谁发的自增自减的一个问题,今天闲来无事细细的研究了一下,
发现自增和自减的一个运算方向不是从左到右,也不是从右到左,而是在一个表达式里如果遇到有++a或者--a时,
都是先算他们的值,然后才算a++或者a--的值,当然,这里的a是一个变量;
举例:
定义a=10;
b=(a++)+(++a)+(a++)
因为先算++a了,所以a的值是11,然后代入到表达式里就是:b=11+11+11=33,a的值是13.
如果b=(a++)+(++a)+(++a)
同样先算++a,第一个++a后,a=11,然后再算++a,a的值就成了12,接着b就等于12+12+12=36,a的值是13。
当然这是本人调试了n种顺序后总结出来的,我用的是turboc2.0,
有结果不同的多发表意见哦。
搜索更多相关主题的帖子: 签名 表达式 
2011-10-08 00:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
小心学坏脑!

授人以渔,不授人以鱼。
2011-10-08 00:34
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:2 
定义a=10;
b=(a++)+(++a)+(a++)
栈w
入栈w:a++ ++a a++
w全员出栈a自增3次为13 其中++a=13  a++=10      结果b=10+13+10=33

b=(a++)+(++a)+(++a)
栈w
入栈w:a++ ++a ++a
w全员出栈a自增3次为13  其中++a=13  a++=10   结果b=10+13+13=36

b=(a++)+(a++)+(a++)
栈w
入栈w:a++ a++
w全员出栈a自增2次为12 a++=10 b=10+10+(a++)
入栈w:10 10 a++
w全员出栈a自增1次为13  a++=10  b=10+10+10=30

b=(++a)+(++a)+(a++)
栈w
入栈w:++a ++a
w全员出栈a自增2次为12 其中++a=12   结果b=12+12+(a++)
入栈w:12 12 a++
全员出栈a自增1次为13  其中a++=12   结果b=12+12+12=36(这里a++等于12是因为前面(++a)+(++a)后a等于12


[ 本帖最后由 ileelsai 于 2011-10-8 01:02 编辑 ]
2011-10-08 00:48
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 3楼 ileelsai
我还以为一个a的值自增过后其余的a的值都是这个值了呢,原来其余的不变呀。
2011-10-08 01:02
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:0 
回复 4楼 小赵q1
这只是我的理解,你多实践下
  写代码时尽量要避免这么写


[ 本帖最后由 ileelsai 于 2011-10-8 01:37 编辑 ]
2011-10-08 01:08
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:0 
怕你理解错误再举个例子
b=(a++)+(++a)+(++a)+(a++)
栈w
入栈:a++ ++a ++a
全员出栈  ++a=12 a++=10 b=10+12+12+(a++)
入栈:10 12 12 a++
全员出栈  a++=12(理由同上)b=10+12+12+12=46




  原则就是配对后全员出栈,式子结束无配对也出栈


[ 本帖最后由 ileelsai 于 2011-10-8 01:17 编辑 ]
2011-10-08 01:14
said9999
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2011-10-7
收藏
得分:2 
回复 6楼 ileelsai
额,,那出栈的条件是什么呢,,,两个入栈变量相同就出栈么
2011-10-08 01:53
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:2 
建意以后只用一种,比如++a
最好只用于程序的辅助标识,不要参与到程序运行的结果,比如只用在循环。
用于结果的一般写成:
a=a+1;
cout<<a<<endl;
这样想当明了。

2011-10-08 09:20
feifei566
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-10-8
收藏
得分:2 
同意楼上的 否则容易出错啊
2011-10-08 14:19
goku_b
Rank: 2
等 级:禁止访问
帖 子:36
专家分:40
注 册:2011-8-3
收藏
得分:2 
以下是引用ileelsai在2011-10-8 00:48:35的发言:

定义a=10;
b=(a++)+(++a)+(a++)
栈w
入栈w:a++ ++a a++
w全员出栈a自增3次为13 其中++a=13  a++=10      结果b=10+13+10=33

b=(a++)+(++a)+(++a)
栈w
入栈w:a++ ++a ++a
w全员出栈a自增3次为13  其中++a=13  a++=10   结果b=10+13+13=36

b=(a++)+(a++)+(a++)
栈w
入栈w:a++ a++
w全员出栈a自增2次为12 a++=10 b=10+10+(a++)
入栈w:10 10 a++
w全员出栈a自增1次为13  a++=10  b=10+10+10=30

b=(++a)+(++a)+(a++)
栈w
入栈w:++a ++a
w全员出栈a自增2次为12 其中++a=12   结果b=12+12+(a++)
入栈w:12 12 a++
全员出栈a自增1次为13  其中a++=12   结果b=12+12+12=36(这里a++等于12是因为前面(++a)+(++a)后a等于12)
我可以很负责任的告诉你你是错的`!
自增自减运算考虑的是变量执行的顺序问题,而非出入栈!三个运算都是一个a~!

[ 本帖最后由 goku_b 于 2011-10-8 16:30 编辑 ]
2011-10-08 16:25
快速回复:关于++a和a++的一些看法
数据加载中...
 
   



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

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