美文网首页
Blcok语法 类型变量

Blcok语法 类型变量

作者: 有一种再见叫青春 | 来源:发表于2016-11-16 10:06 被阅读12次

    下面详细讲解一下带有自动变量值的匿名函数Block的语法,即Block表达式.
    <pre>^void (int event) { printf ("buttonId:%d event = %d\n",, event); }</pre>
    与函数相比较,仅有两点不同.
    <ol>
    <li>没有函数名</li>
    <li>带有^:插入记号便于查找</li></ol>
    <code>^ 返回值类型 参数列表 表达式</code>

    <li>返回值类型:同C语言函数的返回值类型</li>
    <li>参数列表:同C语言相通</li>
    <li>表达式:同C相同,需含有return,和返回值类型相同</li>
    例如可以写出如下的BLcok语法
    ^int (int count) {return count +1};

    Blcok类型变量

    在C语言函数中,就可以将定义函数的地址赋值给函数指针类型的变量中.
    <pre>int func (int count) { return count +1; } int (* funcptr)(int) = &func;</pre>
    这样一来,函数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类型变量赋值.

    <pre>int (^blk1 )(int ) = blk; int (^blk2) (int); blk2 = blk1;</pre>
    在函数参数中使用Block类型变量可以向函数传递Blcok.
    <pre>void func (int (^blk) (int))</pre>

    在函数返回值中指定Block类型,可以将block作为函数的返回值返回.
    <pre>int (^func () (int)) { return ^ (int count ){return count +1;}; }</pre>

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

    相关文章

      网友评论

          本文标题:Blcok语法 类型变量

          本文链接:https://www.haomeiwen.com/subject/odalpttx.html