for 循环如何在 C 中工作?

How do for loops work in C?

在下面的for循环中,控制流是如何工作的?

 int k = 0, x = 7, n = 5;

 for (int i = 0; i < x; i++) {

   /* When j == 4 in first cycle, k == 5 */

   for (j = 0; j < n; j++) { 
      b[i][j] = a[k];
      k++;
   }

   i++;  // i is 2 here.

   for (m = j; m >= 0; m--) {
      b[i][m] = a[k];
      k++;
   }
}

第二个 for 循环尝试用 a[k] 设置第一行。 第三个 for 循环尝试用 a[k].

设置第二行

第二个 for 循环是从 j0 到 jn-1,第三个 for 循环是从 jn 到 j1。

以螺旋方式设置行的种类。

我相信对于嵌套循环,语句的执行顺序遵循这种一般形式(从零开始)

for (zero; one; ) {
   two;                   
   three;                 
   four;                  
   five;                 

   for (six; seven; ten) {
      eight;
      nine;
   }
}

然后在第二轮

for (zero; twelve; eleven ) {
   thirteen;
   fourteen;
   fifteen;
   sixteen;

   for (six; seventeen; twenty) {
      eighteen;
      nineteen;
   }
}

首先,xn 永远不会改变,所以让我们把它们的值放在 for 循环中并从代码中删除它们,这样更容易理解。

 int k = 0;
 for (int i = 0; i < 7; i++) {

   for (int j = 0; j < 5; j++) { 
      b[i][j] = a[k];
      k++;
   }

   i++; 

   for (int m = j; m >= 0; m--) {
      b[i][m] = a[k];
      k++;
   }
}

• 在第 i 个循环的第一次迭代之前

 i = 0;
 k = 0;

j 循环从 0 .. 4

b[0][0] = a[0];  // b[i][j] = a[k]
b[0][1] = a[1];
b[0][2] = a[2];
b[0][3] = a[3];
b[0][4] = a[4];

j 循环退出,因为 j 已经达到 5。

k 与 j 相同(从 0 开始,像 j 一样递增)

i 递增成为 1

m 循环从 5 .. 0

b[1][5] = a[5]; // b[i][m] = a[k]
b[1][4] = a[6];
b[1][3] = a[7];
b[1][2] = a[8];
b[1][1] = a[9];
b[1][0] = a[10];

m 循环退出

m = -1;
k = 11;

• 在第 i 循环的第 2 次迭代:

i = 2;  (because i *for* loop increments it)
k = 11;

j 循环从 0 .. 4

b[2][0] = a[11];  // b[i][j] = a[k]
b[2][1] = a[12];
b[2][2] = a[13];
b[2][3] = a[14];
b[2][4] = a[15];

j 循环退出,因为 j 已经达到 5。

k = 16;

i 递增成为 3

m 循环从 5 .. 0

b[3][5] = a[16]; // b[i][m] = a[k]
b[3][4] = a[17];
b[3][3] = a[18];
b[3][2] = a[19];
b[3][1] = a[20];
b[3][0] = a[21];

。 . .