这是我第一次在这里发帖。请原谅我的经验不足;我只是在学习。
我正在尝试实现 GSL 寻根方法,它需要将因变量和参数结构传递给函数。
这是传递给函数的参数结构(它在 .h 文件中):
struct SumForces_params
{
double curvature;
struct panel panels[1000];
int lenPanels;
};
这是我定义参数实例的地方:
struct SumForces_params params = {0.0000001, {panels[1000]}, lenPanels};
这是功能:
double SumForces(double NAloc, void *params)
{
struct SumForces_params *p = (struct SumForces_params *) params;
double curvature = p->curvature; //works fine
int lenPanels = p->lenPanels; //works fine
struct panel panels = p->panels[1000];
//~ printf("panel 421 location = %g\n", panels[421].Yloc);
//~ Above line gives this error: SumForces.c:54: error: subscripted value is neither
//~ array nor pointer
double yloc = 0;
yloc = p->panels[421].Yloc;
printf("panel 421 location = %g\n", yloc);
}
总的来说,这给了我预期的输出:
printf("Main Panel 421 loc = %g\n",panels[421].Yloc);
但是从函数代码中可以看出,struct panel panel = p->panels[1000]; 不起作用,第二次尝试(最后三行)的输出返回零。有人看到我做错了什么吗?
这是我对结构面板的定义:
struct panel
{
double strain[136];
double stress[136];
double AE[136];
double Ys;
double E;
double Yloc;
double Area;
gsl_interp_accel *acc_stress;
gsl_spline *spline_stress;
gsl_interp_accel *acc_AE;
gsl_spline *spline_AE;
};
在这里,我将面板定义为 1000 个面板结构的数组:
struct panel panels[1000];