首页 > 代码库 > C 返回函数与闭包的考虑
C 返回函数与闭包的考虑
#include <stdio.h> typedef int (*fun)(); fun closure(int i) { int squ() { return i*i; } return squ; } int main() { fun f = closure(2); printf("closure %d\n", f()); return 0; }
C中函数的嵌套定义可以实现类似闭包的效果,只是如果函数是定义在一个循环中时,如:
for (; i>arg-2; i--) { int squ() { return i*i; } arr[arg-i]=squ; }
在最后使用arr函数数组时始终是指向最后定义的一个squ函数。查看2次循环时,发现squ始终指向同一个地址,所以此处认为C在处理时会将前面定义的squ函数覆盖。
这个现象和Python中的返回函数中,引用了可变化变量的现象不同,Python中在循环中定义的函数是指向不同的地址的。
C 返回函数与闭包的考虑
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。