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
    

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

  • 相关阅读:
    git
    界面编程与视图(View)组件
    genymotion的安装
    210中断故障分析
    6410/210按键中断编程
    2440按键中断编程
    中断处理流程深度剖析
    scrapy 写文件进行debug调试
    scrapy 爬虫中间件-offsite和refer中间件
    scrapy文件管道
  • 原文地址:https://www.cnblogs.com/TaoR320/p/12680225.html
Copyright © 2011-2022 走看看