#include <stdio.h> typedef int (*fun)(); fun closure(int i) { int squ() { return i*i; } return squ; } int main() { fun f = closure(); printf("closure %d\n", f()); ; }
C中函数的嵌套定义可以实现类似闭包的效果,只是如果函数是定义在一个循环中时,如:
; i--) { int squ() { return i*i; } arr[arg-i]=squ; }
在最后使用arr函数数组时始终是指向最后定义的一个squ函数。查看2次循环时,发现squ始终指向同一个地址,所以此处认为C在处理时会将前面定义的squ函数覆盖。
这个现象和Python中的返回函数中,引用了可变化变量的现象不同,Python中在循环中定义的函数是指向不同的地址的。