Blcok语法 类型变量

下面详细讲解一下带有自动变量值的匿名函数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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容