码迷,mamicode.com
首页 > 其他好文 > 详细

C 返回函数与闭包的考虑

时间:2017-07-03 17:27:59      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:blog   pre   闭包   code   class   closure   logs   覆盖   pytho   

#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 返回函数与闭包的考虑

标签:blog   pre   闭包   code   class   closure   logs   覆盖   pytho   

原文地址:http://www.cnblogs.com/m2492565210/p/7111827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!