首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

自增自减运算符有关问题,比较晕

2012-03-04 
自增自减运算符问题,比较晕!昨天晚上一个同学问得一个问题。inta,ba1b(a++)+(--a)+(a++)问b的值为多少

自增自减运算符问题,比较晕!
昨天晚上一个同学问得一个问题。

int   a,b;
a=1;
b=(a++)+(--a)+(a++);

问b的值为多少?
我当时觉得应该是3,但是上机器一试为0,顿时很郁闷,不懂为什么?

我用的是vc   6.0平台,哪位高手能够分析一下,并给详细说说++\--运算符的用法
,小生感激不尽!谢谢!

[解决办法]
这种问题没什么意思。
跟平台和编译器相关。
[解决办法]
004018A8 mov dword ptr [ebp-4],1
39: b=(a++)+(--a)+(a++);
004018AF mov eax,dword ptr [ebp-4]
004018B2 sub eax,1
004018B5 mov dword ptr [ebp-4],eax
004018B8 mov ecx,dword ptr [ebp-4]
004018BB add ecx,dword ptr [ebp-4]
004018BE add ecx,dword ptr [ebp-4]
004018C1 mov dword ptr [ebp-8],ecx
004018C4 mov edx,dword ptr [ebp-4]
004018C7 add edx,1
004018CA mov dword ptr [ebp-4],edx
004018CD mov eax,dword ptr [ebp-4]
004018D0 add eax,1
004018D3 mov dword ptr [ebp-4],eax
------------------------------------------------
VC6对以上代码的反汇编
看看执行顺序:一个减法,四个加法.所以一开始a就是0了,然后执行二次加法0+0=0.然后二次自增加法.
[解决办法]
b=(a++)+(--a)+(a++);
=====================
这么说吧
(a++),a是使用后再加,所以在表达式完成前它对a没产生影响
(--a),a是使用前减,所以a立即变为0,而这里的变化影响了整个表达式的a值.
最后b就为0+0+0了.

一个变量在一条语句中出现两次或两次以上,不要使用自增自减,这是编程原则.

[解决办法]
这种东西的结果是和编译器与平台都有关系的,根本就没有固定的答案
[解决办法]
但是有一点没有变,a 最后的值只能为2,这在任何编译器和平台下都一样。

热点排行