黑马程序员技术交流社区

标题: block的typedef 需要的看以看一看 [打印本页]

作者: 一马当先    时间: 2016-3-19 21:45
标题: block的typedef 需要的看以看一看
/*
   函数指针: 指向函数的指针
   指针函数: 返回值是指针类型的函数

   int max(int x,int y){

       return x>y?x:y;

   }

*/


#import <Foundation/Foundation.h>
//声明函数
int max(int x,int y){
   
    return x>y?x:y;
   
}


void test2(){

    //调用函数
    //使用函数名取调用函数,直接访问
    //函数名,存放的是函数的首地址
    int m = max(34,438);
   
    //指针变量间接访问
    //函数指针的定义:
    //定义了一个函数指针变量,名称是p
    // p 可以指向返回值是int 并且有两个int类型的参数的函数
    //        int (*p)(int x,int y);
    //        p = max;
    //
    //        m = p(34,438); //间接访问
    //        NSLog(@"m = %d",m);
   
    //p是一个指针变量?  还是一个类型?
    // 此时把 返回值是int 有两个整型参数的函数,起了别名,别名是p
    typedef int (*p)(int x,int y);
   
    //p = max;
    p pmax;
    pmax = max;
    NSLog(@"pmax = %d",pmax(34,438));

}

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        //myblock 是没有参数,没有返回值的block类型的变量
//        void (^myblock)();
        
        //1,给没有参数,没有返回值的block起别名
        //myblock 是一个类型
        //给没有返回值,没有参数的代码块,起一个别名 myblock
        typedef void (^myblock)();
        //定义一个返回值是void没有参数的block变量,名称为b1
        myblock b1;  //b1是一个变量,myblock是一个类型
        
        //给block变量赋值
        b1 = ^{
        
            NSLog(@"test b1");
        };
        //执行block
        b1();
        
        //2,给有参数的block起别名
        typedef void (^blockType1)(int x,int y);
        //使用别名定义block变量,并且初始化
        //blockType 是一个类型
        //bt是一个变量
        blockType1 bt = ^(int x,int y){
        
            NSLog(@"x+y = %d",x+y);
        
        };
        
        bt(34,23);
        
        //3,给有参数,有返回值的block起别名
        typedef int(^blockType2) (int x,int y);
        //定义有参数,有返回值的block变量,名称是b2
        blockType2 b2 = ^(int x,int y){
        
            return x+y;
        
        };
        
        int s = b2(23,10);
        NSLog(@"s = %d",s);
    }
    return 0;
}





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