博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于 (++a)+(++a)+(++a) 和 (a++)+(a++)+(a++) 问题
阅读量:4053 次
发布时间:2019-05-25

本文共 649 字,大约阅读时间需要 2 分钟。

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

   #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~

转载地址:http://qoaci.baihongyu.com/

你可能感兴趣的文章
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>