typedef定义函数指针和block

1.首先要了解什么叫做typedef

 typedef就是C语言中的一个关键字,其作用就是给一个数据类型起一个别名

 typedef作用主要有两个。

 1)给类型起一个比较容易记住的名字

 2)简化较为复杂的类型声明

2.typedef的具体使用方法

<span style="font-size:18px;">#import <Foundation/Foundation.h>
typedef int newint;
typedef float newfloat;
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        newint a=2;
        NSLog(@"%d",a);
        newfloat b=35.5;
        NSLog(@"%d",b);
    }
    return 0;
}
</span>

上述例子中我们就可以看出typedef int newint; 此处的newint 就等价于newint  同样我们可以知道typedef float newfloat;中的newfloat就等价于float

3.函数指针

首先要明确函数指针其实就是一个指针,只不过这个指针的地址里面存的是函数

   那么怎么定义呢

首先我们定义一个函数 int add (int x,int y); 他的函数指针就是直接 把函数名称换成一个 指针 int (*p) (int x, int y);

<span style="font-size:18px;">/*
   函数指针: 指向函数的指针
   指针函数: 返回值是指针类型的函数
 
   int add(int x,int y){
 
       return x+y;
 
   }
 
 */

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

int main(int argc, const char * argv[]) {
    @autoreleasepool {
    
    //使用函数名取调用函数,直接访问
    //函数名,存放的是函数的首地址
    int m = add(34,438);
    NSLog(@"m = %d",m);
    //指针变量间接访问
    //函数指针的定义:
    //定义了一个函数指针变量,名称是p
    // p 可以指向返回值是int 并且有两个int类型的参数的函数
            int (*p)(int x,int y);
            p = add;
            m = p(34,12); //间接访问
            NSLog(@"m = %d",m);
    
    //p是一个指针变量?  还是一个类型?
    // <span style="color:#FF6666;">此时把 返回值是int 有两个整型参数的函数,起了别名,别名是p,是一个类型</span>
    typedef int (*p)(int x,int y);
    //p = add; 错误 因为此时p是一个别名类型
    p pmax;
    pmax = max;
    NSLog(@"pmax = %d",pmax(34,12));
}
return 0;
} 
</span>

4.利用typedef定义block类型(和指向函数的指针很像)  (block在这里就不详细介绍了)

<pre name="code" class="objc"><span style="font-size:18px;">#import <Foundation/Foundation.h></span>
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变量,blockType2是类型,名称是b2 blockType2 b2 = ^(int x,int y){ return x+y; }; int s = b2(23,10); NSLog(@"s = %d",s); } return 0;}

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值