减少C中函数的参数数量

时间:2019-03-06 14:42:08

标签: c parameter-passing numerical-integration

我想使用“ C的数字配方”中定义的qtrap函数对函数f进行数值积分。

double qtrap(double (*func)(double), double a, double b);

如图所示,它是double类型变量的一维积分。

但是我要集成的函数有一个附加参数a:

double f(double x, int a)
{
    return a + x * x;
}

现在,我正在寻找一种方法来针对不同的a值对f进行积分。

到目前为止,我的想法是

typedef double (*fctp1_t)(double);       //function pointer type for 1 arg
typedef double (*fctp2_t)(double, int);  //function pointer type for 2 args

int a = 10;
fctp1_t = f1d;
f1d = reduceArgument(f, a);

qtrap(f1d, 0, 1);

与reduceArgument类似的东西:

fctp1_t reduceArgument(fctp2_t f2d, int ia)
{
    return f2d(x, ia);
}    

此代码导致错误:未声明'x'。

谢谢您的建议。

1 个答案:

答案 0 :(得分:0)

C不允许构建这样的函数。您可以通过两种方式解决问题:

  • 修改qtrap,使其能够处理参数化函数;

  • 使用全局变量隐式传递参数。