簡體   English   中英

在 C 中打印出二維數組的子矩陣時結果不正確

[英]Incorrect results when printing out a submatrix of a 2D array in C

我是 C 的新手,正在學習 arrays。 我制作了一個 function, print2d來打印出一個二維數組。 我創建了一個 9x9 數組array2d 首先,我使用print2d打印出array2d ,效果很好。 然后,我嘗試打印出array2d的 3x3 子矩陣,它由前三行和前三列中的元素組成。 3x3 子矩陣打印不正確。

主要:

int array2d[9][9] = {
        {0, 1, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {1, 1, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0}
    };
    print2d(rows,cols,array2d);

    print2d(3,3,array2d); // print 3x3 submatrix
void print2d(int rows, int cols, int array[][cols])
{
    printf("{");

    for (int r = 0; r < rows; r++)
    {
        printf("{%i",array[r][0]);
        for (int c = 1; c < cols; c++)
        {
            printf(", %i",array[r][c]);
        }
        printf("}\n");
    }
    printf("}\n");
}

Output: 9x9 矩陣array2d打印正確,但 3x3 子矩陣打印為:

{{0, 1, 0}
{0, 0, 0}
{0, 0, 0}
}

代替

{{0, 1, 0}
{0, 0, 0}
{1, 1, 0}
}

子矩陣的第一行是正確的,但第三行是不正確的。 我的猜測是,通過調用print2d(3,3,array2d) , function print2d期望一個具有 3 列( int array[][3] )的二維數組,而不是 9x9 數組。 我不確定這是什么問題,為什么 output 的第一行是正確的,但第三行不正確。 謝謝您的幫助!

您可以使用雙指針而不是二維數組

void print2d(int rows, int cols, int **array);

或者將子數組定義為上面的@Weather_Vane 注釋:

void print2d(int rows, int cols, int array[rows][cols], int sub_row, int sub_col) {
   for (int r = 0; r < sub_row; r++)
    {
       ...
        for (int c = 1; c < sub_col; c++)
        {
          ...
        }
        ...
    }
    printf("}\n");
}

主 function 用於帶有子陣列 arguments 的陣列

print2d(9,9,array2d, 9, 9);
print2d(9,9,array2d, 3, 3);

雙指針的主要 function:

int main() {
  int rows, cols, i;
  int **array2d;

  /* obtain values for rows & cols*/

  // allocate the array
  array2d = malloc(rows * sizeof(int));
  if (!array2d)
    return -1;
  for (i=0; i<rows; i++) {
    array2d[i] = malloc(cols * sizeof *array2d[i]);
    if(!array2d[i])
        return -1;
  }

  /*init the values of array here */

  print2d(rows,cols,array2d);
  for (i=0; i<rows; i++)
    free(array2d[rows];
  free(array2d);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM