对于抬头:我对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
变量成为一个双指针,一个常规指针,通过引用传递,它只是不会踢。
传递此变量最常见的方式是什么?
任何帮助都会很棒,我真的是这种语言的菜鸟。
答案 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);