关于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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM