zoukankan      html  css  js  c++  java
  • 定义返回Block的函数

    鉴于Block与函数的相似性,先从返回函数指针的函数入手

    返回函数指针的函数

    int fun1(int arg)
    {
        return arg + 1;
    }
    
    int fun2(int arg)
    {
        return arg + 100;
    }
    
    int(*generateFun(const char *name))(int)
    {
        if (name == "fun1")
            return fun1;
        else
            return fun2;
    }
    int main()
    {
    
        int (*fun_ptr)(int) = generateFun("fun2");
        int ret = fun_ptr(30);
        printf("%d
    ",ret);
        return 0;
    }
    

    函数原型为int(*generateFun(const char *name))(int)

    • 最外层为函数返回值的说明,返回值是一个这样的函数指针int (*)(int)
    • 里层则为函数名以及函数形参
    • generateFun接受const char *形参,并返回一个函数指针(形参为int,返回值为int的函数指针)

    返回Block的函数

    int (^func())(int)
    {
        return ^(int count){return count*2;};
    }
    int main()
    {
        int (^blk)(int) = func();
        int result = blk(12);
        printf("%d
    ",result);
        return 0;
    }
    

    函数原型为int (^func())(int)

    • 最外层为函数返回值的说明,返回值是一个这样的Blockint (^)(int)
    • 里层则为函数名以及形参列表

    更好的写法

    通过typedef,可以有更直观的变现方式

    typedef int (^blk_type)(int);
    
    blk_type func()
    {
        return ^(int count){return count*2;};
    }
    

    其实从typedef的表达形式也可以推出函数的定义语法,只是把类型名变为函数名和参数列表。

    PS:《Objctive-C高级编程》中87页有第一个代码段有点错误。

  • 相关阅读:
    HDU 4814
    POJ 3415
    HDU 4941
    C scanf()
    hdu 4850 Wow! Such String!
    HDU 4828 Grids
    HDU 4832 Chess
    HDU 4831
    SpringCloud 网飞系 转换阿里系2
    用jianmu建木自动化打包vue前端应用,并远程ssh建立文件夹,scp文件至对应目录
  • 原文地址:https://www.cnblogs.com/rainySue/p/ding-yi-fan-huiBlock-de-han-shu.html
Copyright © 2011-2022 走看看