C ++ не имеет массивов переменной длины, как в C, поэтому вам нужно использовать new
для выделения массива с переменным размером или использовать std::vector
вместо массива.
Вам нужно передать размер массива func
, чтобы он мог ограничить количество элементов, которые он обновляет, до этого размера.Ваш код будет иметь неопределенное поведение, если длина массива меньше 18.
void func(double t, double y[], double ydot[], int len)
{
for(int i = 0; i < len; i++){
ydot[i] = y[i]+1;
}
}
typedef void (*dydt_func)(double t, double y[ ], double ydot[ ], int len);
void ode(double y0[ ], double yend[ ], int len, double t0,
double t1, dydt_func dydt)
{
double *ydot = new double[len];
dydt = &func;
//This prints out all the value of ydot[] just fine
for (int i = 0; i < 18; i++){
cout << ydot[i] << ",";
}
dydt(t1, y0, ydot, len);
for (int i = 0; i < len; i++){
cout << ydot[i] << ",";
}
};