如何将固定大小的数组转换为指针数组上的指针

时间:2018-12-13 13:07:14

标签: c++ function multidimensional-array

我正在尝试计算行列式,但是构建失败。 有代码,错误减少了。

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);

1 个答案:

答案 0 :(得分:2)

具有二维数组和指向另一个指针的指针不是同一件事。为什么需要对两种不同的功能(例如,函数{{1}中的matdouble 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?