當通過斯坦福大學的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
以及它如何區別於傳遞函數指針作爲參數的機制是什麼?
你有關於陣列你的第二個要求的參考?特別是當它是C++? – krlmlr 2012-02-04 09:13:59
有一點區別,在前者中,'fn'是一個指向函數的指針,而在後者中'fn'被顯式聲明爲指向函數 – 2012-02-04 09:14:27
@ user946850:'§8.3.5/ 5'的指針:... After確定每個參數的類型,將「T數組」或「返回函數T」的類型參數分別調整爲「指向T的指針」或「返回函數的指針T」。 ... – Mankarse 2012-02-04 09:21:53