将具有2D阵列输入的函数传递给函数

Pass function with 2D array input to a function

本文关键字:函数 输入 2D 阵列      更新时间:2023-10-16

我想把一个函数传递给一个函数,在这种情况下,传递函数有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;
}

现在我想把bungee传递给euler,输入2D数组,如下所示:

void bungee(double Y[][], double DY[][])
{ // ... }
void euler(void(ODES)(double[][], double[][])/*,...*/)
{ // ... }
int main()
{ 
euler(bungee);
return 0;
}

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

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

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

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

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

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

类似于为连续阵列解释的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 **);