Я начал изучать C
и начал новый аргумент: the matrices
. Я видел, что вы можете определить матрицу двумя различными способами
WAY 1
Первый способ с использованием оператора индекса []
const int N = 3, M = 4;
int matrix[N][M];
но так как это трудно передать аргументы в функции, потому что компилятор должен знать число столбцов матрицы при компиляции программы. поэтому вам нужно сделать функцию, которая работает только для матриц с n
столбцами
int my_func( int matrix[][3], const int num_lines){...}
WAY 2
Второй способ: использовать массив массивов
const int N = 3, M = 4;
int** m = (int**) calloc(N, sizeof(int*))
for (int i = 0; i < N; i++){
m[i] = (int*) calloc(M, sizeof(int))
}
Таким образом, вы можете легко передать матричный указатель на функцию, бегло работая с ней, но единственная проблема заключается в эффективности выделения памяти и возврате значений.
ПУТЬ 3?
На самом деле я думал, что может быть третий путь, и мне было интересно, правильно ли это делать
const int N = 3, M = 4;
int array[N*M];
for (int i=0; i<N; i++){
for (int j = 0; j<M; j++){
printf("%d%d: %d\n", i, j, array[ i * M + j ]);
}
}
Делать это с моей точки зрения представление должно быть таким же эффективным, как первый способ, который я написал, но вы можете работать с ним более свободно в функциях, потому что вам нужно только передать строки и столбцы в качестве аргументов
int my_func( const int* matrix, const int num_lines, const int num_columns){...}
Является ли way 3
право?