Прослушивая курс Стэнфордского программирования , я наткнулся на фрагмент кода, похожий на следующий.
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
и чем он отличается от передачи указателя функции в качестве параметра?