2014-01-11 6 views
0

전달 함수에 입력을위한 2D 배열이있는 함수에 함수를 전달하려고합니다.함수에 2D 배열 입력을 전달하는 패스 함수

는 1 차원 배열의 나는 그런 짓을 :

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

나는이 같은 2 차원 배열을 입력으로 오일러에 번지를 전달하고 싶습니다 : C/C에서

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

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

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

당신이 무엇을 할 일이 발생하면? 어떤 오류가 발생합니까? – Olotiar

답변

1

++, 배열을 함수로 전달할 때 포인터로 변환됩니다. double Y []는 double * Y와 동일합니다.

2 차원 배열의 경우 함수로 전달할 때 내부 치수를 제공해야합니다.

이중 Y [] []를 전달하면 불완전한 형식 인 double (* Y) []로 변환되기 때문입니다.

대신 double Y [] [50]은 double (* Y) [50]로 변환됩니다.

N 차원 배열의 경우, 내부 N-1 차원을 제공해야합니다.

예를 들어, double Y [] [10] [20] [30].

+0

감사합니다. 쉽습니다. : D 그래서 했어 : 'const int DIM 50; void bungee (double Y [] [DIM], double DY [] [DIM]) {// ...} 공백 오일러 (void (SYS) (double [] [DIM], double [] [DIM ])) {// ...}' – Vito

0

사용자 534498이 연속 어레이 (예 :

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

처럼 2 차원 배열을 만들 경우 사용해야합니다

void bungee(double **); 
관련 문제