什么可能是C中的"double(f)(double)"表达式

Akk*_*yen 7 c

就像我已经在标题中写的那样,我有一个问题,我需要了解double (f)(double)C中的含义.整个方法标题看起来像这样:

Bmp* drawGraph(double (f)(double),double minX,double maxX)
Run Code Online (Sandbox Code Playgroud)

这是一个大学项目,我的教授喜欢缺席或通过电子邮件或其他沟通方式无法访问.

我认为这个名称以及方法的提议几乎都是自我解释的.

在这个方法的信息中说"f"应该是一个函数,但我不知道在这种情况下我应该给出什么样的参数.

Bmp* drawGraph(double (f)(double),double minX,double maxX)
{
    double height = f(maxX);

    Bmp* bmp = newBmp(maxX, f(maxX) * 2);

    background(bmp, BLACK);

    //Hier zeichne ich das Koordinatensystem
    //in seiner minimalistischten Form

    drawLine(bmp, GREEN, 0, f(maxX), maxX, f(maxX));
    drawLine(bmp, GREEN, 0, 0, 0, f(maxX) * 2);

    for(double d = minX; d < maxX; d += 0.1)
    {
            drawLine(bmp, RED, d, f(d) + height, d + 0.1, f(d + 0.1) + height);
    }

    return bmp;
}
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 9

double (f)(double)
Run Code Online (Sandbox Code Playgroud)

f是函数类型的参数:具有double参数并返回double值的函数.

例如:

double foo(double a)
{
    return a + 42.0;
}
Run Code Online (Sandbox Code Playgroud)

该参数被调整(因此声明是等效的)指向具有double参数并返回double值的函数的指针.

double (*f)(double)
Run Code Online (Sandbox Code Playgroud)

所以这些声明都是等价的:

void bla(double (f)(double));
void bla(double f(double));
void bla(double (*f)(double));
Run Code Online (Sandbox Code Playgroud)

  • @TheodorosChatzigiannakis:不需要`&`运算符,因为函数的名称衰减指针本身. (4认同)