Я новичок в C и изучаю массивы. Я сделал функцию print2d
, чтобы распечатать двумерный массив. Я создал массив 9x9, array2d
. Сначала я распечатал array2d
, используя print2d
, который работал отлично. Затем я попытался распечатать подматрицу 3x3 array2d
, которая состоит из элементов в первых трех строках и первых трех столбцах. Подматрица 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");
}
Вывод: Матрица 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)
функция print2d
ожидает двухмерный массив с 3 столбцами (int array[][3]
), а не массив 9x9. Я не уверен, что это за проблема, и почему первая строка вывода верна, но не третья. Спасибо за вашу помощь!