zoukankan      html  css  js  c++  java
  • 关于printf("%d,%d",i++,i++)的输出结果

    int main(){

      int i=0;

      printf("%d,%d",i++,i++);

      return 0;

    }

    输出结果1,0

    网上很多帖子说了这个问题,还有汇编部分截图。我这里不再重复。

    说下个人理解,函数参数是自右向左入栈,这个相信大家都知道。

    这题的关键是右一参数入栈后,右二参数入栈前,这中间做了什么。

    看汇编部分代码可以知道,右一入栈后,拷贝i值到缓冲区后就先做了自增运算,所以右二参数入栈时,i已经进行了自增运算,导致输出结果为1,0

    所以是这种自增减的参数运算题,可以这么算,自右向左,第一个值为原始值,第二个值为第一个值的运算结果,以此类推

    所以printf("%d,%d,%d,%d",i++,i++,i--,i++)的输出结果就是:1,0,1,0

  • 相关阅读:
    13 内建属性 _getattribute_ 内建函数
    12 垃圾回收GC
    11 元类
    12 动态语言 __slots__
    11 作用域
    10 带参数的装饰器 通用装饰器 类装饰器
    9 装饰器
    8 闭包
    6 生成器 yield 协程
    cmd常用命令
  • 原文地址:https://www.cnblogs.com/yzhuang/p/14027071.html
Copyright © 2011-2022 走看看