关于 (++a)+(++a)+(++a) 和 (a++)+(a++)+(a++) 问题

   今晚有一个学弟问我这样一个问题:

   #include<stdio.h>

   int main()

   {
       int a=3,b,c,d;
       b=(++a)+(++a)+(++a);
       a=3;
       c=(a++)+(a++)+(a++);
        a=3;
       d=++a+6;
        printf("b=%d\nc=%d\nd=%d\n",b,c,d);
       return 0;
    }

   大家可以运行一下:在windows下:     VC的结果是:16    10

                                     wintc的结果是:18    10

                                    Linux的结果是:16    10

   这是为什么呢?后来想了一下:其实对于不同的 OS和 编译器是不一样的,虽然平时我们没有写这么纠结的代码,但是呀研究研究还是有意思的、、、

  

   解释:

          VC 和 Linux下的计算机处理机制是:

                                          对于b:先执行++a,然后再是++a,然后执行第一个个 +号,此时注意a的结果是5,而不是4和5,所以(++a)+(++a)的结果是10不是9!!! ,这个值是保存在一个temp的变量中的!!!那么后面一个就好解释了,那么后面a就是6,所以结果是16;;;

     

            wintc下:   

                   对于b,他是首先将++a全部执行完,那么a最终的值是6,那么结果是相当于3个6相加,就是18,他是没有中间变量temp作为临时储存的!!!

 

   但是对于C 来说是一样的,因为a++是后向操作,对于+和a++来说是先执行+的,所以最终结果是9   OK!

  

   对于d来说就很简单了,不解释、、、 

 

   对于不同的编译器是不一样的,所以大家要注意了、、、O(∩_∩)O~


  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值