首页 新闻 会员 周边 捐助

关于C#与C/C++执行代码的区别

0
悬赏园豆:5 [已解决问题] 解决于 2012-09-08 19:06

刚学C#不久,遇到一个问题不解,

  int i = 0;
  int n;
  n=i+(++i);  

  输出n;

如果是C/C++程序,输出n为2,

但如果是C#程序,输出n为1,

这是怎么回事呢?

JYsharp的主页 JYsharp | 初学一级 | 园豆:140
提问于:2012-09-07 21:42
< >
分享
最佳答案
0

你有没觉得C#的结果更好理解?

这跟编译器有关,同是C,编译器不同也可能出现不同结果。

收获园豆:5
向往-SONG | 老鸟四级 |园豆:4853 | 2012-09-07 22:42

我感觉C/C++的结果更好理解,但盼阁下的理解方式,

还有我的两种结果是在同一个编译器下产生的

JYsharp | 园豆:140 (初学一级) | 2012-09-07 23:00

@JYsharp: 

C/C++貌似是先统计一个表达式里有多少个++,是放在变量前面还是后面,放前面就在计算表达式前就先加好,否则就在计算完表达式后再加。

而C#则是遇到一个变量才临时去计算。

所以,C/C++:n=i+(++i),先把i加1,然后再去计算n=i+i=1+1。

C#:n=i+(++i),先遇到i,i=0,n=0+(++i);然后遇到++i,计算出++i的值为1,n=0+1;

 

同样:n=(i++)+i; c/c++的结果是0,C#的结果是1,也是一样的道理。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-07 23:42
其他回答(1)
0

我就觉得是编译顺序的原因,是不是C从右往左,C#从左往右。。。

羽商宫 | 园豆:2490 (老鸟四级) | 2012-09-07 23:44

n=(i++)+(i++)

要是从左还是从右,这个就应该从左和从右都是一样的结果。

但C结果就是0,C#结果是1。

所以C是在表达式计算前统一计算++i,表达式计算完后统一计算i++。

支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-07 23:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册