减少C中函数中的参数个数

问题描述 投票:0回答:1

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

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

如图所示,它是double类型变量的1-d积分。

但是我想要集成的函数有一个额外的参数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'未声明。

谢谢你的任何建议。

c parameter-passing numerical-integration
1个回答
0
投票

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

  • 修改qtrap,使其能够处理参数化函数;
  • 使用全局变量隐式传递参数。
© www.soinside.com 2019 - 2024. All rights reserved.