Blcok语法 类型变量

下面详细讲解一下带有自动变量值的匿名函数Block的语法,即Block表达式.

^void (int event) { printf ("buttonId:%d event = %d\n",, event); }

与函数相比较,仅有两点不同.

  1. 没有函数名

  2. 带有^:插入记号便于查找

^ 返回值类型 参数列表 表达式

  • 返回值类型:同C语言函数的返回值类型

  • 参数列表:同C语言相通

  • 表达式:同C相同,需含有return,和返回值类型相同

  • 例如可以写出如下的BLcok语法
    ^int (int count) {return count +1};

    Blcok类型变量

    在C语言函数中,就可以将定义函数的地址赋值给函数指针类型的变量中.

    int func (int count) { return count +1; } int (* funcptr)(int) = &func;

    这样一来,函数func的地址就能赋值给函数指针类型变量funcptr中.
    同样的,在Block中,可以将Block语言赋值给声明为Block类型的变量中.即源代码中一旦使用Block 语法就相当于生成了可赋值给Block类型变量的"值".Blocks中由Block语法生成的值也被称为"Block".声明Block类型变量仅仅是讲声明函数指针类型的*变为^.该blcok类型变量与一般的C语言变量完全相同.
    下面使用Block语法将Block赋值为Blcok类型变量.
    int (^blk)(int) = ^(int count) {return count + 1;};
    由"^"开始的Block语法生成的Block被赋值给变量blk中.因此与通常的变量相同,所以当然也可以由Block类型变量向Block类型变量赋值.

    int (^blk1 )(int ) = blk; int (^blk2) (int); blk2 = blk1;

    在函数参数中使用Block类型变量可以向函数传递Blcok.
    void func (int (^blk) (int))

    在函数返回值中指定Block类型,可以将block作为函数的返回值返回.

    int (^func () (int)) { return ^ (int count ){return count +1;}; }

    由此可见,在函数参数和返回值中使用BLock类型变量时,记述方式极为复杂.这时,我们可以用typedf解决问题.
    typedf int (^blk_t)(int)

    你可能感兴趣的:(Blcok语法 类型变量)