我正在尝试为我的论文开发代码,为此我试图学习如何将2D数组传递给函数。我写了一些东西。代码在下面,它不能以这种形式工作。我有这个错误:
error: cannot convert ‘float (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]’ to ‘float (*)[2]’ for argument ‘3’ to ‘void func(int, int, float (*)[2], float)’ func(m, n, a, omega);
当我更改此矩阵声明时,浮动a [m] [n];浮动[2] [2]它正在工作。提前谢谢。
void func(int m1, int n1, float a1[2][2], float omeg);
using namespace std;
int main(){
int m = 2;
int n = 2;
int i, j;
float a[m][n];
float x,y,z,omega, c;
x=0.1;
y=0.2;
z=0.3;
c = 0;
omega = (x*y*z)/x;
for(j = 0; j < n; j++)
{
for(i = 0; i < m; i++)
{
a[i][j] = 0.0;
}
}
func(m, n, a, omega);
cout << a[1][0] << endl;
return 0;
}
void func(int m1, int n1, float a1[][2], float omeg)
{
for(int j = 0; j < n1; j++)
{
for(int i = 0; i < m1; i++)
{
a1[i][j] = omeg * 5;
}
}
}
答案 0 :(得分:0)
对const
和m
使用n
,否则使用非标准扩展变量长度数组(VLA)。
我建议使用更直观的std::array
(如果尺寸是动态的,则为std::vector
。
答案 1 :(得分:0)
根据我的理解,声明
float a[m][n]
是不可能的。以这种方式指定变量或常量数组大小是不可能的。声明为
float a[2][2]
如果大小实际上是2乘2,那么会更好读,但在内部它与声明
相同float (*a)[2]
被使用。对于C数组,在定义数组后不可能知道大小,并且声明固定大小的数组作为参数是不可能的,至少不能达到预期的效果。
答案 2 :(得分:0)
试试这个: -
int main(){
int i, j;
float a[2][2];
float x,y,z,omega, c;
x=0.1;
y=0.2;
z=0.3;
c = 0;
omega = (x*y*z)/x;
for(j = 0; j < 2; j++)
{
for(i = 0; i < 2; i++)
{
a[i][j] = 0.0;
}
}
func(a, omega);
cout << a[1][0] << endl;
return 0;
}
void func(float a1[2][2], float omeg)
{
for(int j = 0; j < 2; j++)
{
for(int i = 0; i < 2; i++)
{
a1[i][j] = omeg * 5;
}
}
}