Массив с двумя измерениями и указатель на другой указатель - это не одно и то же.Почему вам нужно по-разному использовать mat
для двух разных функций, таких как double mat[N][N]
в функции getCofactor()
и double **mat
в функции determinant()
?Поскольку вы знаете, каково значение переменной N
, вы можете использовать ее как double mat[N][N]
в функции determinant()
.
double determinant(double mat[N][N], int n)
{
double D = 0; // Initialize result
// Base case : if matrix contains single element
if (n == 1)
return mat[0][0];
double temp[N][N]; // To store cofactors
int sign = 1; // To store sign multiplier
// Iterate for each element of first row
for (int f = 0; f < n; f++)
{
// Getting Cofactor of mat[0][f]
getCofactor(mat, temp, 0, f, n); //ERORRRRRRRRRRR
D += sign * mat[0][f] * determinant(temp, n - 1);
// terms are to be added with alternate sign
sign = -sign;
}
return D;
}
Как только вы внесете упомянутое изменение, ваша ошибка будетбыть исправленным.Надеюсь, это поможет.
Дополнение: Я хочу исправить то, что может вызвать недоразумение;
Массив с двумя измерениями и указатель на другой указатель не являютсято же самое.
Обратите внимание, что у вас может быть что-то, что действует как многомерный массив с указателями.Но то, как они занимают и хранят в оперативной памяти, не одно и то же.Обратите внимание, что многомерный массив представляет собой один блок памяти.Чтобы понять это лучше, проверьте следующий вопрос:
Почему мы не можем использовать двойной указатель для представления двумерных массивов?