首页 > 用户发贴区 > 编程问题提问区 > 请问它是怎么运算的
2009
09-13

请问它是怎么运算的

#include <stdio.h>
main()
{

      int i=0;
      printf(“%d,%d”,++i,i++);
}
运行结果是2,0

但是我自己认为是1,1

为什么它是从后面开始算的呢

逗号运算符不是从左至右运算的吗

 

 

 


请问它是怎么运算的》有 4 条评论

  1. whos 说:

    函数把要传递的参数从后向前依次入栈,也就是从右向左依次计算。

    运算printf(“%d,%d”,++i,i++);时先算i++,要输出 i 的值即0,然后再++即1,最后再计算++i,先++即2,要输出 i 的值即2。

    请注意并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如 printf(“%d,%d,%d”,a,b,c);中的“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,参数间用逗号间隔。

    如果改写为 printf(“%d,%d,%d”,(a,b,c),b,c);则“(a,b,c)”是一个逗号表达式,它的值等于c的值。括弧内的逗号不是参数间的分隔符而是逗号运算符。括弧中的内容是一个整体,作为printf函数的一个参数。

    whos2009-09-13 13:40:17

  2. dragonlys 说:

    很详细呀

    真是太感谢你了
     
    关于入栈的问题我还是不太理解
    回去再看看书
  3. c151151 说:

    这种问题和 a=b+++b的问题一样没有什么可以研究的。这个世界还有很多更有意义的事情去做。如果面试的时候碰到这种问题,那么就暗暗鄙视一下面试官!

  4. lxd 说:

    运行结果是1,0吧

留下一个回复