在C语言中,“double (f)(double)”这个表达式是什么意思?

7

正如标题中所写,我遇到了一个问题,需要理解C语言中double (f)(double)的含义。整个方法头看起来像这样:

Bmp* drawGraph(double (f)(double),double minX,double maxX)

这是一个大学项目,我的教授通常不回复电子邮件或其他的沟通方式。

我认为这个方法的名称和目的非常明显。

在信息信中提到,“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;
}
1个回答

9
double (f)(double)

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

例如:

double foo(double a)
{
    return a + 42.0;
}

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

double (*f)(double)

因此,这些声明都是等价的:

void bla(double (f)(double));
void bla(double f(double));
void bla(double (*f)(double));

@Akkyen 只需记住:你不能在那里插入函数声明,你必须在其他地方声明函数,并将指向该函数的指针(使用&运算符)放在期望此类表达式的位置。 - Theodoros Chatzigiannakis
@TheodorosChatzigiannakis 我会记住的,也非常感谢您的快速回复。 - Akkyen
4
没有必要使用&运算符,因为函数名会自动退化为指针本身。 - Grzegorz Szpetkowski
@GrzegorzSzpetkowski 很好知道!我的 C 语言有点生疏。我主要想强调的是,你不需要在其中放置声明,而是放置一个包含函数名称的表达式。 - Theodoros Chatzigiannakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接