while 循环后的值 post-increment
Value after the while loop with 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
让我们看看 a++ < 10
当 a
等于 10
时。
将发生的第一件事是 10 < 10
将被评估(为 false),然后 a
将递增到 11
。然后执行 while
循环外的 printf
语句。
当 ++
出现在变量的右侧时,它是该行最后计算的东西。
尝试将 a++ < 10
更改为 ++a < 10
,重新运行您的代码,然后比较结果。
因为它是 post-增量。编译器将首先评估 a<10
,然后将 a
递增 1
。
post 递增运算符在语句执行后递增其之前变量的值。
举个例子,
int k = 5 ;
printf("%d\n", k++ );
printf("%d", k );
会输出
5
6
因为在第一个 printf()
中显示了输出,只有在那之后,值才会递增。
所以,让我们看看你的代码
while(a++ < 10)
它检查 a < 10
,然后递增 a
。
让我们在循环中进行几次迭代。
当 a
为 9
时,while 循环检查 9 < 10
然后将 a
递增到 10,因此您将获得该迭代的输出为 10,并且同样,对于下一次迭代,它将检查 10 < 10
但 while 循环不执行,但 a
的值增加到 11
因此,在你的下一个 printf()
,你得到的输出为 11
.
让我们看一段更简单的代码来展示 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
递增后的值。
请解释为什么最后一个 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
让我们看看 a++ < 10
当 a
等于 10
时。
将发生的第一件事是 10 < 10
将被评估(为 false),然后 a
将递增到 11
。然后执行 while
循环外的 printf
语句。
当 ++
出现在变量的右侧时,它是该行最后计算的东西。
尝试将 a++ < 10
更改为 ++a < 10
,重新运行您的代码,然后比较结果。
因为它是 post-增量。编译器将首先评估 a<10
,然后将 a
递增 1
。
post 递增运算符在语句执行后递增其之前变量的值。
举个例子,
int k = 5 ;
printf("%d\n", k++ );
printf("%d", k );
会输出
5
6
因为在第一个 printf()
中显示了输出,只有在那之后,值才会递增。
所以,让我们看看你的代码
while(a++ < 10)
它检查 a < 10
,然后递增 a
。
让我们在循环中进行几次迭代。
当 a
为 9
时,while 循环检查 9 < 10
然后将 a
递增到 10,因此您将获得该迭代的输出为 10,并且同样,对于下一次迭代,它将检查 10 < 10
但 while 循环不执行,但 a
的值增加到 11
因此,在你的下一个 printf()
,你得到的输出为 11
.
让我们看一段更简单的代码来展示 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
递增后的值。