• i++ 和 ++i的真正区别


    创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点!

    个人座右铭:
    1.没有横空出世,只要厚积一定发。
    2.你可以学历不高,你可以不上学,但你不能不学习

    一、i++和++i本质区别

     核心区别点是:i++有中间保存的原因。

    二、测试演练

    1. #include <stdio.h>
    2. int add1()
    3. {
    4. int i=0;
    5. #if 1
    6. printf("add1 = %d\n", (i++ + i++));
    7. printf("i =%d\n", i);
    8. i =0 ;
    9. printf("add2 = %d\n", (i++ + ++i));
    10. printf("i =%d\n", i);
    11. #endif
    12. i =0;
    13. printf("add3 = %d\n", (++i + ++i));
    14. printf("i=%d\n", i);
    15. return 0;
    16. }
    17. int main(void)
    18. {
    19. int i = add1();
    20. printf("main i= %d\n", (i++));
    21. return 0;
    22. }

     

    1. mrlee@mrlee-virtual-machine:/mnt/hgfs/project/visual_gateway/software/src_intra_20220618/test/v1/test/xx3/test$ ./a.out
    2. add1 = 1
    3. i =2
    4. add2 = 2
    5. i =2
    6. add3 = 4
    7. i=2
    8. main i= 0

    解析:

    结合第一部分看:举例i++返回为temp, ++i返回i,只是为了区别

    (1)printf("add1 = %d\n", (i++ + i++));

           

    • 首先执行左边的i++,此时i=0,返回的结果temp1 = 0, 此时i的值为1。
    • 其次执行右边的i++,此时i=1,返回的结果temp2=1,   此时i的值为2.
    • 最后执行中间的加,为(temp1 + temp2) 

    (2)printf("add2 = %d\n", (i++ + ++i));

    •  首先执行左边的i++,此时i=0,返回的结果为temp=0, 此时i的值为1。
    •  其次执行右边的++i,此时i=1,返回的结果为i =2,此时i的值为2.
    • 最后执行中间的加,为(temp + i)

    (3)printf("add3 = %d\n", (++i + ++i));

    • 首先执行左边的++i,此时i=0,返回的结果为i=1, 此时i的值为1。
    • 其次执行右边的++1,此时i=1,返回的结果为i=2,此时i的值为2.
    • 左边和右边都返回的i,此时的i都等于2
    • 最后执行中间的加,为(i+i)= 4(这里需要主要的是:第一次返回的i之前等于1,现在已经变成了2)

    (4)printf("main i= %d\n", (i++));

    之前返回值i=0;

    此时,结果也为0.

    三、其他测试

    1.demo

    1. #include <stdio.h>
    2. int add1()
    3. {
    4. int i=0;
    5. printf("add1 = %d\n", (i++ + i++)); //打印等于1, i=2
    6. printf("i =%d\n", i);
    7. printf("add2 = %d\n", (i++ + ++i)); //打印等于6, i=4
    8. printf("i =%d\n", i);
    9. printf("add3 = %d\n", (++i + ++i)); //打印等于12, i=6
    10. printf("i=%d\n", i);
    11. return 0;
    12. }
    13. int main(void)
    14. {
    15. int i = add1();
    16. printf("main i= %d\n", (i++));
    17. return 0;
    18. }

     

  • 相关阅读:
    LeetCode 2455. Average Value of Even Numbers That Are Divisible by Three【数学】简单
    Greenplum-表分区
    利用梯度上升可视化卷积核:基于torch实现
    基础课-排列组合
    仿射变换矩阵
    关于云主机root无法从VNC登录处理
    【校招VIP】java开源框架之netty
    【Web前端基础进阶学习】HTML详解(下篇)
    前端进阶特训营-TDD制造rollup-0
    Linux:防火墙(一)
  • 原文地址:https://blog.csdn.net/weixin_43155199/article/details/125448090