[英]Pass function with 2D array input to a function
我想將一個函數傳遞給一個函數,在這種情況下,傳遞函數具有2D數組作為輸入。
對於一維數組,我這樣做:
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;
}
在C / C ++中,數組在傳遞給函數時將轉換為指針。 double Y []將與double * Y相同。
對於兩個二維數組,傳遞給函數時必須提供內部維數。
因為如果傳遞double Y [] [],它將被轉換為double(* Y)[],這是不完整的類型。
相反,將double Y [] [50]轉換為double(* 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 **);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.