我可以更改循环的起始条件吗?

can i change starting condition in for loop?

本文关键字:条件 循环 我可以      更新时间:2023-10-16

我在我的代码

中有一个

for (int i=max_position; i<N; ++i) { ... }

但是,在循环中,我要更新max_position的值,这会影响我的前面吗?

来自N4296的c 14标准(尽管C 和C的每个版本都具有等效的措辞)。

for语句

 for ( for-init-statement condition(opt); expression(opt)) statement

等于

 {
     for-init-statement
     while ( condition ) {
         statement
         expression ;
     }
 }

除了在for-init statement中声明的名称在同一 声明区域如所宣布的 条件,除了语句中的continue(未包含在另一个迭代语句中) 在重新评估条件之前执行表达式。[注意:因此,第一个语句指定了初始化 循环;条件(6.4)指定了每次迭代之前进行的测试,以使循环在 条件变成了错误;该表达式通常指定每次迭代后完成的增量。 - 终注]

您可以看到,一旦您进行了初始化的i,修改用于初始化它的表达式中使用的变量将没有效果。(这是标准实际上非常清晰的地方之一。)

no,初始化 int i = max_position将仅执行一次;如果要 altim 循环,请尝试反向 it:

 for (int i = N - 1; i >= max_position; --i) {
   ...
 }

在此向后循环中i >= max_position 条件将在每次迭代中检查。

不,它不会,因为您说的是i = max位置,而for循环使用i变量而不是max_position变量

不。for循环中的第一个语句仅执行一次。

设置了i后,更改用于设置i的变量的值不影响i

您可以在for循环主体内明确更改i的值。

no,因为int i在使用max_position运行之前初始化了一次,因此max_position对循环不再影响。

更改i而不是启动条件,更改max_position不会影响:

for(i = max_position;i<N;i++){
   if(smthHappened)
      i+=3;
}