C 带后期增量的while循环后的值
请解释为什么最后一个printf的值为11? 我真的不明白为什么会这样。 当a=10时,该条件未满足,为什么该值已更改为11? 检查条件后立即进行增量 代码:C 带后期增量的while循环后的值,c,while-loop,post-increment,C,While Loop,Post Increment,请解释为什么最后一个printf的值为11? 我真的不明白为什么会这样。 当a=10时,该条件未满足,为什么该值已更改为11? 检查条件后立即进行增量 代码: 让我们看看a++
让我们看看
a++<10
何时a
等于10
首先会发生的事情是10<10
将被计算(为false),然后a
将增加到11
。然后执行printf
语句,该语句位于循环之外
当++
出现在变量的右侧时,它是行中最后计算的内容
尝试将a++<10
更改为++a<10
,重新运行代码并比较结果。,因为它是增量后的。编译器将首先计算apost increment运算符,在语句执行后,将变量的值增加到前面的值
举个例子,
int k = 5 ;
printf("%d\n", k++ );
printf("%d", k );
将输出
5
6
因为在第一个printf()
中,会显示输出,只有在输出之后,值才会递增
那么,让我们看看您的代码
while(a++ < 10)
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);
我想您会期望它输出11
。实际上,它将输出10
这是因为a++
所做的。它递增a
的值,但表达式a++
的值是a
的初始预递增值
如果我们想在我的答案顶部以多个语句的形式编写初始代码,它实际上会被转换为:
int a = 0;
int b = a;
a = a + 1;
printf("%d %d\n", a, b);
我们可以访问的另一个增量是pre-increment。不同之处在于,表达式++a
的值是a
增加后的值。为什么你认为a
不应该在a=10
时增加?你知道增量后是如何工作的吗?@BlueMoon我认为你的第二个问题的答案很明显,这反过来又回答了第一个问题。现在是的,谢谢大家的回答,我并不清楚,即使条件没有满足,这个值也会增加。@Misiek777本身,一般建议不要编写while(a++<10)
这样的代码,因为它可能会让人困惑/不清楚,或者至少会让开发人员停顿一下。
int a = 0;
int b = a++;
printf("%d %d\n", a, b);
int a = 0;
int b = a;
a = a + 1;
printf("%d %d\n", a, b);