スタンフォード大学の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 ++を使用して自分のシステムでコードをコンパイルしました。彼らは両方とも完璧に走ります。
は、私が唯一の機能func2
にi
のアドレスを与えるvoid func2(int *a)
に&i
を通過させながら機能などvoid func1(int a)
へint i = 2
を渡すと、その関数のことi
の新しいコピーを作成することを知っています。
fn
をplot
に渡すメカニズムは何ですか?また、パラメータとして関数ポインタを渡す方法とはどのように違いますか?
使用すると、配列に関する2番目の請求のための参照を持っていますか?特にC++の場合は? – krlmlr
前者では 'fn'は暗黙のうちに関数へのポインタであり、後者の' fn'では明示的に関数へのポインタが宣言されています –
@ user946850: '§8.3.5/ 5':...後各パラメータの型を決定すると、「Tの配列」または「Tを返す関数」のいずれかのパラメータが「Tへのポインタ」または「Tを返す関数へのポインタ」にそれぞれ調整される。 ... – Mankarse