c++ 如何返回二维数组?[副本]

tct7dpnv  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(99)

此问题已在此处有答案

Return a 2d array from a function(10个答案)
Return array in a function(20个答案)
9天前关闭
我在做一个函数来反转一种矩阵,我在返回它时遇到了麻烦。我已经查找了一些教程,购买他们没有工作,可能是因为他们有一个不同的情况,这就是为什么它来到这个网站来回答我的问题。下面是代码(C++):

float inverse(float mat[4][4])
    {
    float nmat[4][4];
    nmat[0][0] = mat[0][0]; nmat[0][1] = mat[0][1]; nmat[0][2] = mat[0][2]; nmat[0][3] = mat[0][3];
    nmat[1][0] = mat[1][0]; nmat[0][1] = mat[1][1]; nmat[1][2] = mat[1][2]; nmat[1][3] = mat[1][3];
    nmat[2][0] = mat[2][0]; nmat[0][1] = mat[2][1]; nmat[2][2] = mat[2][2]; nmat[2][3] = mat[2][3];

    nmat[3][0] = -(mat[3][0] * mat[0][0] + mat[3][1] * mat[1][0] + mat[3][2] * mat[2][0]);
    nmat[3][1] = -(mat[3][0] * mat[0][1] + mat[3][1] * mat[1][1] + mat[3][2] * mat[2][1]);
    nmat[3][2] = -(mat[3][0] * mat[0][2] + mat[3][1] * mat[1][2] + mat[3][2] * mat[2][2]);
    nmat[3][3] = 1.0f;

    return mat;
    }
yhived7q

yhived7q1#

你可以使用std::array来代替低级数组,因为std::array可以被复制、返回和传递,没有任何问题:

#include <array>
using Float2D = std::array<std::array<float, 4>,4>;

Float2D inverse(const Float2D& mat)
{
    Float2D nmat;
    nmat[0][0] = mat[0][0]; nmat[0][1] = mat[0][1]; nmat[0][2] = mat[0][2]; nmat[0][3] = mat[0][3];
    nmat[1][0] = mat[1][0]; nmat[0][1] = mat[1][1]; nmat[1][2] = mat[1][2]; nmat[1][3] = mat[1][3];
    nmat[2][0] = mat[2][0]; nmat[0][1] = mat[2][1]; nmat[2][2] = mat[2][2]; nmat[2][3] = mat[2][3];
    nmat[3][0] = -(mat[3][0] * mat[0][0] + mat[3][1] * mat[1][0] + mat[3][2] * mat[2][0]);
    nmat[3][1] = -(mat[3][0] * mat[0][1] + mat[3][1] * mat[1][1] + mat[3][2] * mat[2][1]);
    nmat[3][2] = -(mat[3][0] * mat[0][2] + mat[3][1] * mat[1][2] + mat[3][2] * mat[2][2]);
    nmat[3][3] = 1.0f;
    return mat;
}

int main()
{
    Float2D mat;
    // fill in mat with values
    //...
    // Get inverse
    auto invMat = inverse(mat);
}
wz3gfoph

wz3gfoph2#

你想返回一个新的数组还是改变你的数组?当你将整个矩阵复制到nmat时,我想你想要返回nmat,因为nat是不变的!正如@273K所提到的,函数的返回类型不应该是一个浮点数,而是一个数组的数组。最后一点:如果使用循环来复制数组,看起来会更干净。

相关问题