如何正确传递2D数组指针作为参数?

时间:2018-04-12 07:46:40

标签: c++

对于抬头:我对cpp非常新。习惯于PHP和JS作为工作语言,我发现指针令人难以置信。

所以我有这个名为Macierz的类。该类应该包含浮点变量的Matrixes,并且应该有一个构造函数接受一个二维数组,以便将它们打印到字段中。

该字段是这样声明的 float mx3[3][3];

构造函数有这样的声明:Macierz(float**); 身体使用附加功能:

Macierz::Macierz(float** f) {
    length = 3;
    populateWith(f, length);
}

void Macierz::populateWith(float** val, int length) {
    for (int i = 0; i < length; i++)
        for (int j = 0; j < length; j++)
            mx3[i][j] = val[i][j];
}

在我的main()函数中,我想用已创建的float数组声明该类。 我试着这样做,但它只是按照上帝的意图行事:

float y[3][3] = { {1.00f, 2.00f, 3.00f}, { 4.00f, 5.00f, 6.00f }, { 7.00f, 8.00f, 9.00f } };

Macierz m5(y);

这是我想要做的基本模板。我试过让y变量成为一个双指针,一个常规指针,通过引用传递,它只是不会踢。

传递此变量最常见的方式是什么?

任何帮助都会很棒,我真的是这种语言的菜鸟。

2 个答案:

答案 0 :(得分:1)

你需要记住,数组会自然地衰减到指向第一个元素的指针。但这不是递归的。

对于示例中的y,衰减是指向y的第一个元素的指针,它等于&y[0]。这是指向数组的指针,其类型为float(*)[3],这是您的参数所需的类型:

Macierz::Macierz(float (*f)[3]) { ... }

答案 1 :(得分:0)

通过将float复制到指针指针类型

来管理解决此问题
float y[3][3] = { {1.00f, 2.00f, 3.00f}, { 4.00f, 5.00f, 6.00f }, { 7.00f, 8.00f, 9.00f } };

    float** x = 0;
    x = new float*[3];

    for (int i = 0; i < 3; i++) {
        x[i] = new float[3];

        for (int j = 0; j < 3; j++) {
            x[i][j] = y[i][j];
        }
    }

    Macierz m5(x);