alt*_*ser 2 c++ arrays methods pointers
我在C++中使用指针时遇到了一些问题.我用不同大小的数组实现了三种方法,但计算方法相同.所以我决定提取计算并将它们放在一个需要数组的新方法中.但这不起作用,我不知道如何修改我的程序.
void method1() {
float a[3][3];
calculate(a, 3);
}
void method2() {
float a[4][4];
calculate(a, 4);
}
void method3() {
float a[5][5];
calculate(a, 5);
}
void calculate(float *param[], int n) {
// Code
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用全局变量或向量等但我需要这个结构中的逻辑.
这是编译器错误:
Test.cpp: In function 'void method1()':
Test.cpp:7:16: error: cannot convert 'float (*)[3]' to 'float**' for argument '1' to 'void calculate(float**, int)'
Test.cpp: In function 'void method2()':
Test.cpp:12:16: error: cannot convert 'float (*)[4]' to 'float**' for argument '1' to 'void calculate(float**, int)'
Test.cpp: In function 'void method3()':
Test.cpp:17:16: error: cannot convert 'float (*)[5]' to 'float**' for argument '1' to 'void calculate(float**, int)'
Run Code Online (Sandbox Code Playgroud)
提前致谢!
template <int n>
void calculate(float (¶m)[n][n]) {
std::cout << param[x][y];
}
void method1() {
float a[3][3];
calculate(a);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你想支持动态大小(不太可能),你将不得不做一个奇怪的技巧,并假装编译器假装它是一个1d数组,这很快就会变得棘手.
int index(int x, int y, int n) {return y*n+x;}
void calculate(float* param, int n) {
std::cout << param[index(x, y, n)];
}
void method1() {
float a[3][3];
calculate(a[0], 3);
}
Run Code Online (Sandbox Code Playgroud)