将2D数组输入的函数传递给函数

时间:2014-01-11 09:30:04

标签: c++ arrays function 2d

我想将函数传递给函数,在这种情况下,传递函数具有用于输入的2D数组。

对于1D阵列,我这样做了:

void bungee(double Y[], double DY[])
{
   // ...
}

void euler(void(ODES)(double[], double[]), double A[], double STEP)
{
   // ...

   ODES(A, B);
}

int main()
{
    // ...

    euler(bungee, y, dt);

    return 0;
}

现在我想通过2D数组输入将蹦极传递给euler,如下所示:

void bungee(double Y[][], double DY[][])
{ // ... }

void euler(void(ODES)(double[][], double[][])/*,...*/)
{ // ... }

int main()
{ 
    euler(bungee);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

在C / C ++中,数组在传递给函数时将被转换为指针。 double Y []将与double * Y相同。

对于二维数组,在传递函数时必须提供内部维度。

因为如果你传递双Y [] [],它将被转换为double(* Y)[],这是一个不完整的类型。

相反,双Y [] [50],将被转换为double(* Y)[50],这很好。

对于N维数组,必须提供内部N-1维度。

例如,双Y [] [10] [20] [30]。

答案 1 :(得分:0)

与针对连续数组所解释的user534498类似,例如

void bungee(double [][50]);

void main()
{
    double array[100][50];
    bungee(array);
}

但是如果您像这样创建2D数组

double **arr = new double* [100];
for (int i=0; i<100; i++)
    arr[i] = new double [50];

你必须使用

void bungee(double **);