私はcと関数のポインタを使って実験していました。次のコードはコンパイラとしてgccでうまく動作します。関数のポインタとその振る舞い
typedef int(* one_var_func)(int);
int Multiply(int x, int y) {
return x * y;
}
one_var_func curry(int(* f)(int, int), int x) {
int curried_f(int y) {
return f(x, y);
}
return (curried_f);
}
int apply(int(* f)(int), int x) {
return f(x);
}
int main() {
int(* p)(int, int);
one_var_func q;
int e;
p = & Multiply;
q = curry(p, 2);
e = apply(* q, 10);
printf("%d \n", e);
return 1;
}
ただし、私はこのマイナーな変更を行いました。
int apply(int (*f)(int) ,int x){
int a;
a=f(x)
return a;
}
プログラムがセグメンテーションフォルトをスローします。私はなぜ、どのように理解できないのですか?説明は本当にいいですね。
私はあなたがここでやろうとしていることを完全には得ていませんが、あなたのコードにはネストされた関数*があり、Cには存在しません。 –
@FelixPalmen GCC拡張です。本当にカレーにすることができるかどうかは分かりませんが、それは魔法のようです。 – unwind
どこが違うのですか?デバッガから何を伝えましたか? –