黑马程序员技术交流社区

标题: 关于typedef的问题 [打印本页]

作者: wtj900    时间: 2015-9-2 23:50
标题: 关于typedef的问题
typedef  void (^myblock) (int)
定义block新类型为什么能这样写?
typedef定义类型的格式不是(typedef   旧类型   新类型)吗?
作者: 1wang2huan    时间: 2015-9-3 08:46
你这个的意思是 把void (^myblock)这个你自己定义的类型改名为int吧,话说这个真的对吗?
作者: yibyli    时间: 2015-9-3 09:37
这个跟typedef 一个函数指针类似吧,都是  typedef 返回类型(*或者^  类型名称)(参数类型,.....)
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        typedef  void (^myblock) (int);//定义了返回void有一个整型参数的block类型myblock
        myblock test = ^(int a){//利用myblock类型定义了一个指针变量test指向一个块,该块有一个整型参数a,返回void
            NSLog(@"%i",a);};
        test(3);//使用这个块,传入参数3
    }
    return 0;
}
2015-09-03 09:25:00.127 test111[565:17774] 3
作者: wtj900    时间: 2015-9-3 20:06
1wang2huan 发表于 2015-9-3 08:46
你这个的意思是 把void (^myblock)这个你自己定义的类型改名为int吧,话说这个真的对吗? ...

我的意思是把void (^) (int) 类型取名为myblock,为什么可以这样做?求指教。
作者: wtj900    时间: 2015-9-3 20:08
yibyli 发表于 2015-9-3 09:37
这个跟typedef 一个函数指针类似吧,都是  typedef 返回类型(*或者^  类型名称)(参数类型,.....)
#import

是啊,我知道这一点,但我不太明白的是,为什么可以这样定义,应该怎样和普通的typedef联系在一起?求指教。
作者: yibyli    时间: 2015-9-4 20:59
wtj900 发表于 2015-9-3 20:08
是啊,我知道这一点,但我不太明白的是,为什么可以这样定义,应该怎样和普通的typedef联系在一起?求指 ...

有时候没必要钻牛角尖的,经常用的话自然就明白了,如果非要求个理解的话,就当它是一般现象中的特殊现象吧
作者: 1wang2huan    时间: 2015-9-6 07:46
你看一下这个这个帖子吧,希望对你帮助!

typdef的用法总结
http://bbs.itheima.com/thread-235097-1-1.html


作者: 弥修斯    时间: 2015-9-6 08:21
这问题真的是钻牛角尖了……
作者: 小笼包    时间: 2015-9-6 10:34
typedef就是重新取一个名字,你用的是block定义的变量,
block本身定义变量的形式就是void (^myblock) (int);//定义了返回void有一个整型参数的block类型myblock
然后你再用typedef定义block类型,形式就是typedef  void (^myblock) (int)
这样变量的类型就是myblock,你再重新定义变量名




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2