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
    

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

  • 相关阅读:
    素数路径Prime Path POJ3126 素数,BFS
    Fliptile POJ3279 DFS
    Find the Multiple POJ1426
    洗牌Shuffle'm Up POJ3087 模拟
    棋盘问题 POJ1321 DFS
    抓住那只牛!Catch That Cow POJ3278 BFS
    Dungeon Master POJ2251 三维BFS
    Splitting into digits CodeForce#1104A
    Ubuntu下手动安装Nvidia显卡驱动
    最大连续子序列和
  • 原文地址:https://www.cnblogs.com/TaoR320/p/12680225.html
Copyright © 2011-2022 走看看