什么是;对于(;--i>;=0;”)而言;你的意思是C?
(;--i>=0;)的什么是;对于(;--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)的循环
在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
让我们比较一下这两种情况下的“更简单”代码。
在第一种情况下,我们谴责