用嵌套循环代码解释二维数组的输出

Explain the output of 2D array with nested loop code

#include <stdio.h>
int main()
{
    int i, j, k, px[] = { -2, -2, -1, -1, 1, 1, 2, 2 },
                 py[] = { -1, 1, -2, 2, -2, 2, -1, 1 };
    int cox[4][4] = { { 0 } };
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            for (k = 0; k < 8; k++)
                if (((i + px[k]) >= 0 && (i + px[k]) < 4) &&
                    ((j + py[k]) >= 0 && (j + py[k]) < 4))
                    cox[i][j]++;
            printf("%d\t", cox[i][j]);
        }
        printf("\n\n");
    }
}

我部分理解这个嵌套循环。但我不能完全理解为什么它的某些部分的输出是 3 为什么中间部分是 4 但我明白为什么这个 2d 数组的角部分的输出是 2.please 解释一下。

由于结果矩阵是象限对称的,让我开始检查 四种情况:(i=0, j=0), (i=0, j=1), (j=1, i=0) and (i=1, j=1).

  • 如果(i=0,j=0),条件(i + px[k]) >= 0 && (i + px[k]) < 4) && ((j + py[k]) >= 0 && (j + py[k]) < 4)满足两次:当k=5和k=7时。
  • 如果(i=0,j=1),条件满足3次:当k=5,k=6,k=7.
  • 如果(i=1,j=0),条件满足3次:当k=3,k=5,k=7.
  • 如果(i=1,j=1),条件满足四次:当k=3,k=5,k=6,k=7.

你可以将类似的考虑扩展到四个象限,那么你就可以 获取输出。