我正在尝试计算行列式,但是构建失败。 有代码,错误减少了。
void getCofactor(double mat[N][N], double temp[N][N], int p, int q, int n)
{
int i = 0, j = 0;
// Looping for each element of the matrix
for (int row = 0; row < n; row++)
{
for (int col = 0; col < n; col++)
{
// Copying into temporary matrix only those element
// which are not in given row and column
if (row != p && col != q)
{
temp[i][j++] = mat[row][col];
// Row is filled, so increase row index and
// reset col index
if (j == n - 1)
{
j = 0;
i++;
}
}
}
}
}
double determinant(double **mat, 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;
}
如何解决此问题? main.cpp:49:50:错误:无法将参数'1'的'double(*)[4]'转换为'double '到'double determinant(double **,int)'* * D + =符号* mat [0] [f] *行列式(temp,n-1);
答案 0 :(得分:2)
具有二维数组和指向另一个指针的指针不是同一件事。为什么需要对两种不同的功能(例如,函数{{1}中的mat
和double mat[N][N]
函数中的getCofactor()
)以不同的方式使用double **mat
?由于您知道determinant()
变量的值是什么,因此您也可以在N
函数中将其用作double mat[N][N]
。
determinant()
做出我提到的更改后,您的错误将得到解决。希望对您有所帮助。
添加:我想更正可能引起误解的内容;
具有二维数组和指向另一个指针的指针不是 一样的东西。
请注意,您可以拥有类似带有指针的多维数组的功能。但是它们如何占用和存储在RAM中的方式并不相同。请注意,多维数组是单个内存块。为了更好地理解它,请检查以下问题;
Why can't we use double pointer to represent two dimensional arrays?