c ++ 2d数组传入函数

时间:2014-12-04 14:41:06

标签: c++ arrays function g++

我正在尝试为我的论文开发代码,为此我试图学习如何将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;
            }
        }

}

3 个答案:

答案 0 :(得分:0)

constm使用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;
        }
    }
   }