while循环后的值,后增量

时间:2015-04-11 15:42:58

标签: c while-loop post-increment

请解释一下为什么最后一个printf给出值11? 我真的不明白为什么会这样。 当a = 10时,条件不满足,为什么这个值变为11? 检查条件后立即增加?

代码:

int main(void) {
    int a = 0;
    while(a++ < 10){
        printf("%d ", a);
    }
    printf("\n%d ", a);
    return 0;
}

输出:

1 2 3 4 5 6 7 8 9 10 
11 

4 个答案:

答案 0 :(得分:4)

a++ < 10等于a时,让我们看10

首先发生的事情是10 < 10将被评估(为假),然后a将增加到11。然后执行printf循环之外的while语句。

++出现在变量的右侧时,它就是在线上评估的最后一件事。

尝试将a++ < 10更改为++a < 10,重新运行代码并比较结果。

答案 1 :(得分:3)

后增量运算符在执行语句之后递增变量的值。

我们举一个例子,

int k = 5 ;
printf("%d\n", k++ );
printf("%d", k );

将输出

5
6

因为在第一个printf()中显示输出,只有在此之后,该值才会递增。

所以,让我们来看看你的代码

while(a++ < 10)

它会检查a < 10然后再增加a

让我们转到循环中的几次迭代。

a9时,while循环检查9 < 10然后将a递增到10,因此您将获得该迭代的输出为10,同样,对于下一次迭代,它将检查10 < 10但是while循环不会执行,但a的值会增加到11,因此,在下一个printf()中,输出为11

答案 2 :(得分:2)

让我们看一段更简单的代码来展示a++的作用。

int a = 0;
int b = a++;

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

我认为您希望输出1 1。实际上,它会输出1 0

这是因为a++的作用。它会增加a的值,但表达式a++的值是a的初始预递增值。

如果我们想把我的答案顶部的初始代码写成多个语句,它实际上会被翻译成:

int a = 0;
int b = a;
a = a + 1;

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

我们可以访问的另一个增量是预增量。不同之处在于表达式++a的值是a增加后的值。

答案 3 :(得分:1)

因为它的后增量。编译器将首先通过a<10评估a和THEN增量1