2

我正在尝试使用 GSL 库来解决 ODE,但我在使用 void 指针时遇到了一些困难

我需要在应该包含数组的数组上发送一个参数:

double k1[2][4];

被发送到

gsl_odeiv_system sys = {func, jac, 2, &k1};

这被传递给funcjac作为*params

int func (double t, const double y[], double f[], void *params)

在func中,我试图通过以下方式提取k1:

double k1[2][4];
k1 = *(double[][])params;

或者

k1 = (double[][])params;

或者...

k1 = *(double *)params;

ETC

我想问题是:有没有一条线的解决方案?

4

1 回答 1

5

我认为您不能像这样转换为数组类型(多维数组)。您可能需要声明一个临时变量来保存指向数组第一个元素的指针。

当然,您需要指定每行的元素数才能使其正常工作。否则编译器不知道如何访问结果数组中的元素(请记住,它x[i][j]在内部转换为每行*(x + i*n + j)n元素的数量)。

IE

 double x[5][2];

 int main()
 {
     double (*y)[5][2];

     void *z = x;

     y = z;


     /* after you extract the pointer from 'z' you 
        can access the elements using (*y)[][] */
     (*y)[1][1] = 1.0;
 }

&k1顺便说一句,将数组传递给函数时不必使用。数组的名称可以用作其地址(指向第一个元素的指针)。

于 2011-05-12T04:16:45.297 回答