Прослушивая курс Стэнфордского Programming Abstractions , я наткнулся на фрагмент кода, который выглядит следующим образом .
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;
}
Я скомпилировал код в своей системе с помощью GCC, затем G ++; они оба отлично бегают.
Я знаю, что передача int i = 2
в такую функцию, как void func1 (int a)
, создаст новую копию этого i
для эта функция при передаче & i
в void func2 (int * a)
даст только функции func2
адрес i
.
Может ли кто-нибудь объяснить мне, каков механизм передачи fn
в plot
и чем он отличается от передачи указателя функции в качестве параметра?