【问题标题】:Integrating function pointer积分函数指针
【发布时间】:2014-01-06 14:54:45
【问题描述】:

我是 C 新手,在理解以下函数的一部分时遇到了一些问题。

简而言之,它将数值 R -> R 函数与矩形方法相结合:

double numint(double (*f)(double), double x1, double x2, double dx)
{
    double x, sum = 0;
    for (x = x1; x < x2; x += dx)
        sum += f(x) * dx;
    return sum;
}

我的问题是:

1.) double (*f)(double) 代表什么?我如何调用这部分功能?它是示例中未定义的类型,还是可以单独使用?

例如,exampledouble = numint( ?? , double1, double2, double3);

感谢您的帮助!

【问题讨论】:

  • 还可以查看cdecl.org。您可以写一些您不理解的声明并获得英文翻译,反之亦然。对于您的特定陈述,翻译是“将 f 声明为指向函数(双)返回双精度的指针”:)

标签: c function pointers function-pointers


【解决方案1】:

f 是一个函数指针,它需要 double 作为参数并返回 double。所以你必须使用这个原型传入一个函数地址

double myfunc(double);

在这一行中调用它:

sum += f(x) * dx;

例子:

 double myfunc(double v)
 {
    return v*v;
 }

 int main(int argc, char *argv[])
 {
     double x1 = 1.0;
     double x1 = 2.0;
     double x3 = 5.0;

     double val = numint(myfunc, x1, x2, x3)
     return 0;
 }

【讨论】:

  • OP 的一个小细节:f 指向的函数可以用f(x)(*f)(x) 调用。
【解决方案2】:

要添加 Devolus 的答案,您可以像这样调用numint

double parabola(double x) {
  return x * x + 3 * x + 1;
}

int main() {
  int ans = numint(parabola, 0, 3, 0.1);
  // gets integral from 0 to 3 of x^2 + 3x + 1

  // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 2015-07-23
    • 2020-04-13
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多