A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王振宇351x 中级黑马   /  2014-8-22 11:54  /  1276 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王振宇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;
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马