C中的自加自减语句

来源:百度知道 编辑:UC知道 时间:2024/05/29 01:17:37
例:当i=3,i++*++i+i--*--i
在不同的系统中的结果是不同的,在TC中做参数和计算时的结果不同,比如TC和VC也是不同的,能不能具体解释一下是怎么得到的,最好有过程
在TC系统里,,i++*++i+i--*--i ,做参数如:printf("%d",i++*++i+i--*--i );与在程序中的参数不同

int i=3;
i++*++i+i--*--i;
结合顺序是这样的,(i++)*(++i)+(i--)*(--i);
计算过程是这样的: 4*4+3*3;
首先 (i++)//事后计算,i还是3;参与运算的是i,
(++i)//直接计算,i变成4;参与运算的是i,
(i++)*(++i)实际是i*i//变成了4*4; 此时的i是4.

其次 (i--)//事后计算,i还是4;参与运算的是i,
(--i)//直接计算,i变成3;参与运算的是i,
(i--)*(--i)实际上是i*i//变成了3*3;此时的i是3.

然后 16+9得到结果.

最后 (i++);//i变成4;
(i--);//i变成3;

所以式子的值是25,变量i变成了3.

这是在VC中的运行方式,不知道在其它编译器是什么情况,请高手出来指导一下.

在dev-c++中也是这样.

不过在dev-c++和vc中,其它情况下也可能是有区别的.

3*5+5*3=30

原因:
运算符的优先级:(从上到下递减)
++ ++
* % /
+ -

当然要先算 ++ --了,
算过之后就是 3*5+5*3
至于自增自减的情况,应该不用多说吧

ANSI C并没有对表达式中的子表达式的求值顺序做出规定,允许编译系统自行确定。所以,在VC中的计算规则确实如同网友ninigou所说的一样

而在TC中,对于i=3,i++*++i+i--*--i的值,系统按照从左到右顺序求解,即先计算i++,实现i值增1变为4,再求++i,此前,i值为4,执行++i后,i值为5,依此规则,最终结果为 30 .

你又测试过吗?我觉得应该是相同的呀
如果不同,我觉得应该是由于计算的顺序造成的
也就是一种可能是先算i++*++i 就是3*5+5*3=30
另一种可能是先算i--