解释输出?

时间:2014-11-29 14:46:00

标签: c increment decrement

#include<stdio.h>

int main()
{
int a = 10;

printf("%d %d %d",++a,a++,a--);

return 0;
}

我编辑了一下代码..现在的输出是:11 9 10 它现在变得更复杂了..

3 个答案:

答案 0 :(得分:2)

由编译器决定函数调用参数的顺序。


如果编译器从左向右(这将解释您的输出):

  • a 是10
  • prä-increment表示 a 递增(值11作为参数传递)
  • 后递减,表示 a 稍后递减 (值11作为参数传递)
  • 后增量,表示 a 后递增 (值10作为参数传递)

但如果我编译它,例如使用另一个编译器,我可以得到不同的输出。

答案 1 :(得分:1)

如下重写可能会让您更容易理解:

注意:我假设编译器会生成从左到右评估参数的代码!这可能是编译器特定的。

#include<stdio.h>
int main()
{
    int a = 10;
    int param2, param3, param4;

    param2 = ++a;  // increments a to 11 and evaluates to 11
    param3 = a--;  // evaluates to current value of a then decrements a (11)
    param4 = a++;  // evaluates to current value of a then increments a (10)

    printf("%d %d %d",param2,param3,param4);

    return 0;
}

答案 2 :(得分:0)

增量(++)和减量( - )运算符非常重要。因此,在++ a的情况下,该值从10增加到11然后打印,对于a - 打印当前值,即10,然后a增加到11.类似地,在最后一种情况下,打印++当前值11并且它增加到12。