В C массивы располагаются в памяти последовательно, строка за строкой, называемая основная строка , например, массив, созданный следующим образом:
int array[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};//4 rows of 3 columns
.. . хранится в памяти как:
|1|2|3|4|5|6|7|8|9|10|11|12|
|row 1|row 2|row 3| row 4 |
Итак, ваша функция , как написано , должна передавать n
как количество строк для печати во втором аргументе (как это так), но укажите количество столбцов в третьем аргументе.
Измените это:
void print_first_n_row(double **matrix, int n, int row)
на это:
void print_first_n_row(double **matrix, int n, int col)
Я протестировал это изменение, создав [4][3]
индексных доступных ячеек памяти с использованием выделенной памяти для: double **matrix;
(4 указателя на двойные, каждый указывает на 3 двойных местоположения.) Затем заполнил каждое местоположение серией чисел и передал соответствующие аргументы:
int n = 4;
int col = 3;
void print_first_n_row(matrix, n, col);
Я видел это:
Когда прошло:
int n = 2;
int col = 3;
void print_first_n_row(matrix, n, col);
Я видел это:
Еще один предложение, как указано в комментариях:
Это:
x = matrix[i][j];
Более читабельно, чем:
x=*(*(matrix+i)+j);