2014-01-11 155 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 **);