黑马程序员技术交流社区
标题: 终于弄懂block了 [打印本页]
作者: 王振宇351x 时间: 2014-8-22 11:54
标题: 终于弄懂block了
本帖最后由 王振宇351x 于 2014-8-22 11:56 编辑
之前一直弄不懂block的使用,今天终于探索了下,得到了一些结论:block的声明:
int (^myblock)(); // 没有参数.
int (^myblock1)(int); // 有形参.
定义:
int(^myblock)()=^(){
printf("hehe\n");
return 1;
};
int(^myblock1)(int)=^(int a){
printf("hehe%d\n",a);
return 1;
};
调用
int main(){
myblock();
myblock1(5);
return 0;
}
block也可以作为参数,传给其他函数,如下: // 这也是我之前添加动画的时候,一直搞不懂的.
void test(void(^block)()){
printf("hehe1\n");
block();
printf("hehe2\n");
}
int main(){
test(^(){
printf("hehe3\n");
});
return 0;
}
结果是
hehe1
hehe3
hehe2
Program ended with exit code: 0
这个时候,下面的蓝色部分,整个代码块作为test函数的参数.所以,输出的顺序,就可以理解了.
int main(){
test(^(){
printf("hehe3\n");
});
return 0;
}
另外,如下代码,也是可以的,输出的结果,和上面一样:
void test(void(^block)()){
printf("hehe1\n");
block();
printf("hehe2\n");
}
int main(){
void (^myblock)() = ^(){
printf("hehe3\n");
};
test(myblock);
return 0;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |