函数作为参数vs函数指针作为参数

MrO*_*ire 6 c c++ parameters function

在聆听斯坦福大学的编程抽象课程时,我遇到了一些如下所示的代码.

void plot(double start, double end, double (fn)(double)) {
    double i;
    for (i = start; i <= end; i += 1)
        printf("fn(%f) = %f\n", i, fn(i));
}

double plus1(double x) {
    return x + 1;
}

int main(void) {
    plot(1, 10, plus1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用GCC编译了我的系统代码,然后是G ++; 他们都运行得很好.

我知道,传递一个int i = 2成一个功能,如void func1(int a)将做出一个新的副本,i该功能同时传递&ivoid func2(int *a)只会给函数func2的地址i.

因此,谁能给我解释一下什么是用于传递机制fnplot和它传递一个函数指针作为参数有什么不同?

Man*_*rse 7

void foo(double fn(double))和之间绝对没有区别void foo(double (*fn)(double)).两者都声明了将函数指针作为参数的函数.

这类似于void bar(double arr[10])和之间没有区别void bar(double* arr).

  • @ user946850:`§8.3.5/ 5`:...确定每个参数的类型后,任何类型为"T of T"或"函数返回T"的参数都被调整为"指针T"或"指针"功能返回T,"分别.... (3认同)