zoukankan      html  css  js  c++  java
  • printf()函数压栈a++与++a的输出

    printf()中a++与++a的输出问题

    在C语言中有个很常用的函数printf(),使用时从右向左压栈,也就是说在printf("%d %d %d %d ",a,a++,++a,++a)中,依次从右向左开始计算,计算完后才会往%d中输出,因为有多条赋值语句,所以他是个累加过程,直到压栈结束后输出最终得累加值
    下面是几组测试样例:

    int a;
     a=1;      printf("%d %d %d %d
    ",a,a++,++a,++a);  //4 3 4 4
     a=1;      printf("%d %d %d %d
    ",++a,a++,++a,a);  //4 2 4 4
     a=1;      printf("%d %d %d %d
    ",++a,a,a++,++a);  //4 4 2 4
     a=1;      printf("%d %d %d %d
    ",a++,a++,++a,a++);  //4 3 5 1
    

    在这里面有一个a++,和++a两种赋值的语句,它们在printf()中输出时需要注意一下
    a++我们都知道是先使用后加一的,那么在printf("%d %d %d %d ",a,a++,++a,++a);这里也是一样的,从右向左依次计算值,我们先假设把累加数值暂存在t中,则从右向左依次为
    int a=1;

     ++a     a自增1               t=2 
     ++a     a自增1               t=3
     a++    先使用(输出3)再自增1   t=4
     a       不改变               t=4
    

    所有的a++与a的值都按最终的t输出,所以输出为4 3 4 4

    只要遇到a++这种先使用在变化的量优先输出。

    再比如a=10; printf("%d %d %d %d ",a,a++,++a,++a);代码
    在这里插入图片描述
    因此输出结果为13 12 13 13

    以上就是我总结的判断在printf()中a++与++a的输出问题。
    最后再补上一组测试用例:

    int a;
     a=10;      printf("%d %d %d %d
    ",a--,a++,++a,--a);  
     a=10;      printf("%d %d %d %d
    ",++a,a++,a,a--);  
     a=10;      printf("%d %d %d %d
    ",a++,a--,a++,++a);  
     a=10;      printf("%d %d %d %d
    ",a++,a,++a,a++);  
    

    输出结果分别为

    //11 10 10 10
    //11 9 11 10
    //11 12 11 12
    //12 13 13 10
    

    最后说明一下因为目前博主只是小菜鸟一枚,很多东西都不懂,只是随便写写,希望我写的这篇文章对你能有帮助。

  • 相关阅读:
    洛谷P1169 [ZJOI2007]棋盘制作
    洛谷P4147 玉蟾宫
    洛谷P3068 [USACO13JAN]Party Invitations S
    洛谷P3594 [POI2015]WIL-Wilcze doły
    洛谷P2564 [SCOI2009]生日礼物
    洛谷P4296 [AHOI2007]密码箱
    洛谷P2421 [NOI2002]荒岛野人
    洛谷P3990 [SHOI2013]超级跳马
    MySQL 默认引擎 默认编码
    Python 换源
  • 原文地址:https://www.cnblogs.com/TaoR320/p/12680225.html
Copyright © 2011-2022 走看看