Blocks 是C语言的扩充功能,带有自动变量的匿名函数。
C 函数指针类型变量 vs Block 类型变量
C 函数指针类型变量 | Block 类型变量 |
返回值类型 方法名 参数列表 表达式
int func(int count)
{
return count + 1;
}
|
^返回值类型 参数列表 表达式
^int (int count)
{
return count+1;
}
|
声明函数指针类型变量
int (*funcptr)(int);
|
声明Block类型变量
int (^blk) (int);
|
将定义的函数地址赋值给函数指针类型变量
int (*funcptr)(int) = &func;
|
使用Block 语法将Block 赋值给Block类型变量
int (^blk) (int) = ^int (int count) {return count+1;};
|
完整的Block 语法和一般的C语言函数定义相比,仅有两点不同:
(1)没有函数名
(2)带有“^”
在函数参数和返回值中使用Block类型变量的记述比较
不是要typedef 声明Block 类型 |
使用typedef 声明Block 类型
typedef int (^blk_t) (int);
|
void func(int (^blk)(int))
{}
|
void func(blk_t blk)
{}
|
int (^func())(int)
{
return ^int (int count) {return count+1;};
}
|
blk_t func()
{
blk_t blk = ^int (int count) {return count+1;};
return blk;
}
|