i++、++i的计算问题

        听老梁讲了i++、++i后,发现脑子根本不够用,尴尬所以自己在gcc上敲了很多相关程序,有了自己的一套理解。希望对有相同疑问的人,提供些许帮助。

    int a ;

    int i = 2;

      

 1、 碰到 i++(i--) ,先不用管,计算过程中他们对 i 的值没有影响,直至计算结束,有n个 i++(i--),则 i 的值加n。

  例如: a =(i++)+(i++)+(i--)+(i++);

  结果: a = 8;(2+2+2+2)

        i = 4;(2+1+1-1+1)            

 2、 遇见++i(--i) ,先自增(减),再代入i

   例如:a = (++i) + (i++) ;   a = (i--)+(++i) ;  a = (++i) + (++i) 

   过程:  {                 {               {

             (i=3) +  i         i  +  (i=3)     (i=3) + (i=4) 

             3   +  3          3  +   3         4   +  4 

         }                  }                }

    结果:a = 6;i = 4        a = 6;i = 2;        a = 8; i =4;

          

 3、 加减法运算是从左往右进行的,如果有多个加式,gcc中是先计算前两个的结果,再依次往右计算下去。

    例如:a = (++i) + (++i) + (++i) + (++i);    a = (i--) + (++i) +(--i)+(i++);

    过程: {                              {

            ((i=3)+ (i=4)+(++i)+(++i)         (i+ (i=3) )+(--i)+(i++)            

             (4 + 4+ (i=5) )+(++i)            (3+3+(i=2) )+(i++)

                13   + (i=6)                  8  + i                    

           }                              }  

              结果:a = 19; i = 6;           a = 10; i = 2;   

 4、 如果加号(减号)右边是个带括号的长式子,需要根据++i(--i)来对i的值进行确定,然后再计算

   例如:a =(i++)+((++i)+(i++)); a=(--i)+((i++)+(++i)+i); a=(++i)+( (++i)+(i++)+(++i)+(--i)+i)   

   过程:{                  {                             {

          i + ( (i=3)+ i)    (i=1) + (i + (i =2)+ i)         (i=3)+(  (i=4)+i + ...)  

          3 + 3 + 3            2 + 2 + 2+ 2                     i  + ( 8+ (i=5)+...)

          }                  }                                   i  +  (13 +(i=4)+i)  

                                                                4+13+4+4

  结果:  a = 9;i = 5;       a = 8; i = 3;                     a = 25; i = 5;

 5、在参数传递中的计算(从右向左)

  int fun(int a, int b, int c, int d) 

  {

      printf("%d,%d,%d,%d",a,b,c,d);

  }  

  main()

  {

      int i = 2;

      fun(i,++i,i--,i*10)

  }   

              计算规则是,遇到++i(--i)和i,计算出i的值,用符号i代入括号中,最后用i的值代替。而遇到i++(i--),则先写下其值,再计算i的值代入后面的运算。参数中有运算符,则直接计算代入。

 

             从右向左,2*10; 先赋值,再减1,得i=1 ; 加1,i=2 ;     i = 2     

  过程:原式->fun(i,++i,i--,20) ->fun(i,++i,2,20)  ->fun(i,i,2,20)->fun(2,2,2,20)

  如果求:fun(i++,i+1,++i,i)->fun(3,4,i,i) ->fun(3,4,4,4)

         fun(--i,i,i+0,i++)->fun(i,i,i,2)->fun(2,2,2,2)

   

 

    所以 ,还是要多加编程练习才能真正理解吧。。      

 

 

 

 

 

 

 

                   

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值