代码改变世界

C语言中自增的疑惑

2011-09-14 11:43  MichaelYin  阅读(1416)  评论(19编辑  收藏  举报

由于要准备笔试,所以捡起了好久不看的C语言,运算符优先级真的是挺蛋疼的,这不,今天在那折腾的时候就被一个问题给纠结住了,自己不能解释这种现象,就发到园子里面请教一下大家了。

          int y,r;
          y=3;
          r=0;
          r= 2*y+(++y);
          printf("%d",r);
          return 0;

 

代码其实很简单,我写这个代码主要是想知道++y后的值对表达式中的其他地方的y是不是有影响的,这个代码在CodeBlock中执行的结果是10,由于(++y)其实的结果是4,所以前面用来计算的y的值其实是3,到这里,我就以为++y的值在y自增后在别处是没有影响的。

但是,诡异的事情接下来发生了

我将2*y改成了y

          int y,r;
          y=3;
          r=0;
          r= y+(++y);
          printf("%d",r);
          return 0;
运行的结果竟然是8,这下我就觉得很纠结了,就没了一个乘法,这地方就成了这样么?我觉得这个地方如果和前面要统一的话就应该输出7才对,后来在C#中写了相似的代码,结果是7,但是对于C这个地方的处理确实很疑惑,也发在园子里面看看大家对此的看法。
我的环境是Xp CodeBlock10