【发布时间】:2024-04-22 04:00:02
【问题描述】:
我正在试验 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 扩展。不知道它是否真的可以做成咖喱,这似乎很神奇。
-
段错误在哪里?你的调试器告诉你什么?
-
您在
a=f(x)之后错过了;,这在这里工作正常:rextester.com/IAKVTA93918 -
@unwind 好吧,如果允许返回指向嵌套函数的指针,支持闭包是有意义的......
标签: c gcc segmentation-fault