使用函数在函数中声明数组值

时间:2019-06-12 06:54:39

标签: c++ arrays function c++11

首先,很抱歉,如果我混淆了一些声明/定义(declare / define)等术语,我目前正试图使其熟悉。我的问题是:我必须在代码中创建一个大矩阵。我想将其移到文件末尾的一个单独的函数中,以使事情更简单。有没有简单的方法可以做到这一点?我不能使用“向量”,因为我必须在稍后将矩阵传递给不支持“向量”的函数(不要问,这个其他函数不是我写的)。

我目前正在使用此代码(因为它正在工作),该代码在main函数中声明了矩阵,因此它不会超出范围。我希望可以直接在函数中分配矩阵的值,但是我无法使其工作。

void make_matrix(float (&matrix_float)[255][4]);

int main()
{
    // ...
    float matrix[255][4]{ 0 };
    make_matrix(matrix);
    // ...
}

void make_matrix(float (&matrix_float)[255][4])
{
    float preparation[255][4]{ { 0, 0, 0, 0 },
                               { 0.639999985694885, 0, 0.800000011920929, 1 },
                               { 0, 1, 0, 1 },
                               // ........
                             };

    for (int i = 0; i < 255; i++)
        for (int j = 0; j < 4; j++)
        {
            {
                matrix_float[i][j] = preparation[i][j];
            }
        }
}

有没有更优雅的方法呢?

1 个答案:

答案 0 :(得分:0)

问题是:普通数组不可分配。

您可以在定义点初始化数组。但是您以后不能再为已经存在的数组分配其他数组。

然后,仅按元素分配是可能的。就像您在子功能中所做的一样。您应该至少在准备中添加constexpr。但这并没有真正的改变。通过二维数组作为参考的一大优势!

您要求一个更优雅的解决方案。 Jarod42已经给出了提示。将矩阵包装在结构的POD(普通旧结构)中。然后,C ++将创建各种特殊功能,例如为您分配作业。

将新的初始化程序列表分配给POD将起作用。而不是矩阵,您将编写“ pod.matrix”。就这样

请参见以下示例:

#include <iostream>
constexpr size_t Rows = 3;
constexpr size_t Cols = 4;

struct POD
{
    double matrix[Rows][Cols];
};
void makePOD(POD& pod);

int main()
{
    // ...
    POD pod{};
    makePOD(pod);

    std::cout << pod.matrix[1][0];
    // ...
}

void makePOD(POD& pod)
{
    pod = { {   { 0.0, 0.0, 0.0, 0.0 },
                { 0.639999985694885, 0.0, 0.800000011920929, 1.0 },
                { 0.0, 1.0, 0.0, 1.0 }
            }
    };
}

希望这会有所帮助。 。 。