winTC与VC6.0 编译器对int i=0,j=3;i=j++*++j+j--*--j;输出的i值不同

来源:百度知道 编辑:UC知道 时间:2024/05/25 13:19:07
#include "stdio.h"
main(){
/* 在这里加入您自己的代码 */
int i=0,j=3;
i=j++*++j+j--*--j;
printf("i=%d",i);
getchar();
}
winTC 输出i=18;VC6.0 输出i=25;到底那个正确?

因为,不同的运行环境,算法不同。在winTC中,一个表达式内右自增运算符,所计算的值在表达式计算结束之后才返回,左自增是先将其各个算完后再返回计算。而vc6.0在每算一步就会返回自增运算符所作用的值。
例如:
您提供的int i=0,j=3;
i=j++*++j+j--*--j;
在winTC中,i=(3)*(3)+(3)*(3)=18,j=3+1+1-1-1=3;

这是正常的,同一个语句中出现多个++或--,其顺序在不同的编译器上是不同的。哪个正确取决于你原本想要的是什么顺序。不过总的来说不建议这样用

正常的,不同得编译器运算顺序不同。当年我们老师给我们说过。
vc++是从后向前运算的。

VC中的那个25是怎么算的 我算出来怎么是30?