Podczas odsłuchu kursu Stanforda Programming Abstractions, natrafiam na jakiś fragment kodu, który wygląda następująco.funkcja jako wskaźnik funkcji vs jako parametr
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;
}
Skompilowałem kod w moim systemie przy użyciu GCC, a następnie G ++; obaj działają doskonale.
wiem, że przechodząc int i = 2
do funkcji takich jak void func1(int a)
utworzy nową kopię tego i
dla tej funkcji podczas przechodzenia &i
do void func2(int *a)
dadzą tylko funkcję func2
adres i
.
Czy ktoś może mi wyjaśnić, jaki jest mechanizm przekazywania fn
do plot
i jak różni się od przekazywania wskaźnika funkcji jako parametru?
Czy masz odniesienie do drugiego zastrzeżenia dotyczącego tablic? Zwłaszcza gdy jest to C++? – krlmlr
Istnieje pewna różnica, w pierwszym, 'fn' jest nieprzerwanie wskaźnikiem do funkcji, aw tym drugim' fn' jest jawnie deklarowanym wskaźnikiem do funkcji –
@ user946850: '§8.3.5/5': ... Po określając typ każdego parametru, dowolny parametr typu "array of T" lub "function return T" jest odpowiednio dostosowywany do "wskaźnika do T" lub "wskaźnika do funkcji zwracającej T". ... – Mankarse