and*_*epd 2 c functional-programming function functor
我想在C中做这样的事情:
typedef int (*func)(int);
func make_adder(int a) {
int add(int x) {
return a + x;
}
return &add;
}
int main() {
func add_42 = make_adder(42);
// add_42(10) == 52
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它可行吗?我的错误在哪里?
不,这是不可能的,因为在内存中没有任何地方int a可以以&add引用它的方式存储.int a存在于函数堆栈中make_adder并且不存在,因此&add不能指原始函数.制作副本int a是不可能的,因为该副本的生命周期需要与之相关&add,并且C没有必要的垃圾收集.
因此,总之,我们无法保存原始堆栈变量a或在堆上进行复制.