什么是;对于(;--i>;=0;”)而言;你的意思是C?

什么是;对于(;--i>;=0;”)而言;你的意思是C?,c,loops,C,Loops,(;--i>=0;)的在C中是什么意思 计数器是如何递减的,它与(;i>=0;--i)的有何不同?的(;--i>=0;)的工作原理如下: 假设i为10,它将减小i值并比较9>=0,依此类推 因此,输出类似于9,8。。。直到0 而(;i>=0;--i)的循环将首先转到10,然后减小值,然后检查i>=0。所以输出将是10,9,8。。。直到0for(;--i>=0;)的工作原理如下: 假设i为10,它将减小i值并比较9>=0,依此类推 因此,输出类似于9,8。。。直到0 而(;i>=0;--i)的循环

(;--i>=0;)的
在C中是什么意思

计数器是如何递减的,它与(;i>=0;--i)
有何不同?

的(;--i>=0;)
的工作原理如下:

假设i为10,它将减小i值并比较9>=0,依此类推

因此,输出类似于
9,8。。。直到0

而(;i>=0;--i)
的循环
将首先转到10,然后减小值,然后检查i>=0。所以输出将是
10,9,8。。。直到0

for(;--i>=0;)
的工作原理如下:

假设i为10,它将减小i值并比较9>=0,依此类推

因此,输出类似于
9,8。。。直到0


而(;i>=0;--i)
的循环
将首先转到10,然后减小值,然后检查i>=0。所以输出将是
10,9,8。。。直到0

这些构造形式上等同于

while (--i >= 0)
{
  Body;
}


你能更好地看到区别吗?

这些结构在形式上等同于

while (--i >= 0)
{
  Body;
}


你能更好地看到差异吗?

第一个函数递减
i
,然后检查条件


第二个先检查条件,如果为真,则在执行循环体后递减
i

第一个先递减
i
,然后检查条件

第二个参数首先检查条件,如果为真,则在执行循环体后递减
i

for
中的三个参数(
初始化
条件
增量
)是可选的(但它们仍然需要分号
)。因此,您可以安全地为(;;)编写
,它与
while(1)
相同。比如说

for(;x>y;x++){…}

(;1;x++){if(x>y)break;

(;){if(x++>y)break;

for(;x++>y;){…}

有效且等效。在此情况下,增量出现在条件参数中,就像在代码示例中一样。

for中的三个参数(
初始化
条件
增量
)是可选的(但它们仍然需要分号
)因此,您可以安全地为(;;)编写
,它与
while(1)
相同

for(;x>y;x++){…}

(;1;x++){if(x>y)break;

(;){if(x++>y)break;

for(;x++>y;){…}


有效且等效。在这种情况下,增量出现在条件参数中,就像在代码示例中一样。

好吧,它与表示(i=0或某个值;--i好吧,它与表示
相同(i=0或某个值;--i它们非常相似,但不相同!首先,您必须了解C中的
for
循环是如何执行的:

例如:

      1      2, 5  4
      |      |     |
      v      v     v
for(i = 0; i < 5; i++) {
    // Do something <-- 3
}
产出将是:

4
3
2
1
0
5 // See here the difference
4
3
2
1
0
因为在第一次检查条件(第2点)之后,它执行
for
语句的代码块,并且
i
已经被递减

在第二个示例中:

int i = 5;
for( ; i>=0; --i)
    printf("%d\n", i);
产出将是:

4
3
2
1
0
5 // See here the difference
4
3
2
1
0

这里您得到了差异,因为它在第4点中递减,所以第一次以值5运行时。

它们非常相似,但不相同!首先您必须了解C中的
for
循环是如何执行的:

例如:

      1      2, 5  4
      |      |     |
      v      v     v
for(i = 0; i < 5; i++) {
    // Do something <-- 3
}
产出将是:

4
3
2
1
0
5 // See here the difference
4
3
2
1
0
因为在第一次检查条件(第2点)之后,它执行
for
语句的代码块,并且
i
已经被递减

在第二个示例中:

int i = 5;
for( ; i>=0; --i)
    printf("%d\n", i);
产出将是:

4
3
2
1
0
5 // See here the difference
4
3
2
1
0

这里您可以得到差异,因为它在第4点中递减,所以第一次以值5运行。

for
循环的
中有三个主要组件

初始化、条件和事后考虑

初始化在整个语句的开始发生一次。条件发生在每个循环之前。每一个周期之后都有后遗症。考虑<代码> i <代码>从2开始:

for (; --i >= 0; )

Initialization: i = 2
Condition: i = 1
Afterthought: i = 1
Condition: i = 0
Afterthought: i = 0
Condition: i = -1
Exit
在另一种情况下

for( ; i>=0; --i)
Initialization: i = 2
Condition: i = 2
Afterthought: i = 1
Condition: i = 1
Afterthought: i = 0
Condition: i = 0
Afterthought: i = -1
Condition: i = -1
Exit

您可以看到,第二个版本实际上持续一个周期更长!

for
循环中有三个主要组件

初始化、条件和事后考虑

初始化在整个语句的开始发生一次。条件发生在每个循环之前。每一个周期之后都有后遗症。考虑<代码> i <代码>从2开始:

for (; --i >= 0; )

Initialization: i = 2
Condition: i = 1
Afterthought: i = 1
Condition: i = 0
Afterthought: i = 0
Condition: i = -1
Exit
在另一种情况下

for( ; i>=0; --i)
Initialization: i = 2
Condition: i = 2
Afterthought: i = 1
Condition: i = 1
Afterthought: i = 0
Condition: i = 0
Afterthought: i = -1
Condition: i = -1
Exit

您可以看到,第二个版本实际上持续一个周期更长!

通常,我们可以将任何
for
循环或
while
循环转换为一组基本上是线性的语句,其中包含
goto
。这样做可能有助于比较代码

案例1 案例2 让我们比较一下这两种情况下的“更简单”代码。 在第一种情况下,我们在每个循环体之前第一次减小
i
,在第二种情况下,我们在每个循环体之后减小
i


最简单的方法是考虑当你进入这个循环时发生什么,当<代码> i=0</COD>。在第一种情况下,在这个代码块之后,你将得到一个结果值<代码> i==-1 。在第二种情况下,<代码> i <代码>不会改变(即,<代码> i=0</COD>)。,因为我们从未到达increment语句。

通常,我们可以将任何
for
循环或
while
循环转换为一组主要是线性语句,其中包含
goto
。这样做可能有助于比较代码

案例1 案例2 让我们比较一下这两种情况下的“更简单”代码。 在第一种情况下,我们谴责