2014-01-06 42 views
0

我是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);

谢谢您的帮助!

+0

也可以查看http://www.cdecl.org/。你可以写一些你不明白的声明,并获得英文翻译,反之亦然。对于您的特定语句,翻译是“声明f为指向函数的指针(double)返回double”:) – BlackJack

回答

4

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; 
} 
+2

OP的一个小细节:可以用'f(x)'调用'f'指向的函数' (* f)(x)'。 –

3

要添加到答案由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 

    // ... 
}