不了解操作前后增量

时间:2014-03-09 03:52:14

标签: c increment decrement

我有以下C程序,我不理解这个程序的输出:

#include <stdio.h>

int main()
{
    int a=8;

    printf("%d\n", a++);

    printf("%d\n", ++a);

    printf("%d\n", a*a);

    return 0;
}

第一个 printf 的值为 8 ,第二个 printf 的值为10 !!但是如何??

2 个答案:

答案 0 :(得分:2)

  • a++是后缀表示法,该值首先递增,但返回上一个值,然后将其传递到prinf
  • ++a是前缀表示法,该值在传递到printf之前首先递增。

您的代码大致相当于:

int a = 8;
printf("%d\n", a);
a++;

a++;
printf("%d\n", a);
printf("%d\n", a*a);
return 0;

但它更接近于此(注意我使用,运算符,它运算符计算每个子表达式,但只返回最终的子表达式):

int a = 8; int aTemp;

// a++
printf("%d\n", (aTemp = a, a = a + 1, aTemp) );

// ++a
printf("%d\n", (a = a + 1) );

答案 1 :(得分:1)

a ++将在当前语句中使用a(在这种情况下输出到屏幕),然后在语句后增加“a”。

++ a将在执行语句之前递增“a”。