gpt4 book ai didi

c - while循环中作为参数的自增操作

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:24 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <string.h>

main()
{
int a;
a=1;
while(a++<=2)
;

printf("%d",a);
}

此代码给出的输出为 4。a 是如何递增的?

最佳答案

如何a++工作?

首先,让我们了解当您键入 a++ 时会发生什么.您正在使用的称为post increment operator .要解释它的行为,可以看一下“冗长的等价物”:

prev_a = a;
a = a + 1;
return prev_a;

请注意 a++ 返回的值expression 是它在增量之前的值。

另一方面,如果你写了++a ,您将使用 pre 递增运算符,它返回递增后的值。有点像:

a = a + 1;
return a;

所以当你写a++ <= 2 ,您正在比较 a 的当前值,并在“比较后” 递增它以用于下一次迭代。


如何while工作?

现在当你写类似 while (expr) { /* ... */ } 的东西时,会发生什么 expr 在每次迭代之前被求值,只有当表达式的结果是true时迭代才真正运行。 .


那么会发生什么?

  1. 第一次迭代
    • a等于1 ;
    • 它小于或等于2 : 我们决定再进行一次迭代;
    • 增量a ;
  2. 第二次迭代
    • a等于2 ;
    • 它小于或等于2 : 我们决定再进行一次迭代;
    • 增量a ;
  3. 第二次迭代
    • a等于3 ;
    • 小于或等于2 : 我们决定在这次迭代后停止;
    • 仍然增加 a ,作为“评估整个表达式 a++ <= 2”的一部分

最后,a等于4 .

我猜你被骗的事实是 a 的先前值(在增量之前)用于比较,但增量确实总是作为表达式的一部分发生。 a正在递增,即使比较返回 false !

最后,您的代码等同于:

int a;
a = 1;

int prev_a;
while(true) {
prev_a = a; // the previous value is saved for the comparison
a = a + 1; // the increment ALWAYS happen
if (prev_a > 2) {
break;
}
}

关于c - while循环中作为参数的自增操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com