2014-01-11 116 views
0

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

对于一维数组我已经做了这样的:

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; 
} 

现在我想传递蹦极欧拉与二维数组输入,这样的:

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

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

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

什么,当你这样做会发生什么?你会得到什么错误? – Olotiar

回答

1
在C/C

++,阵列将传递到函数时将转换为指针。双Y []将与double * Y相同。

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

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

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

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

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

+0

谢谢,那很容易。 :D 所以我做了: 'const int DIM 50; (void)(DIM),double [] [DIM],double [] [DIM] ])) {// ...}' – Vito

0

像user534498解释的连续阵列,例如,

void bungee(double [][50]); 

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

,但如果你创建二维数组这样

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

必须使用

void bungee(double **);