函数指针和block的区别

///  main.m

//  C_函数指针

//  Created by dengyanzhou on 15/3/11.

//  Copyright (c) 2015 mobby. All rights reserved.

//

/*

 *方法名称就是方法在内存的入口地址

 */

int add(int add1,int add2)

{

        return add1 + add2;

}

//定义一个指向有两个整型参数,返回值为整型的函数指针类型;

typedef int (*Sum1) (int ,int);

//定义一个叫做Sum2类型参数为两个整型的,返回值为整型的block

typedef int (^Sum2) (int ,int);

#import <Foundation/Foundation.h>

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

    @autoreleasepool {

        //定义一个Sum1类型的变量 sum1指向了有两个参数,返回值为整型的函数也就是说 sum1 就是一个函数指针

        Sum1  sum1 =add;

        //调用sum1指向的函数并打印

        NSLog(@"sum1 = %d",sum1(2 ,3));

        // Sum2这种block类型定义一个Sum2类型的block变量 sum2 并赋值

          Sum2 sum2 = ^(int a ,int  b){

            return a + b ;

        };

        //调用sum2 blocl并打印

        NSLog(@"sum2 = %d",sum2(2,3));

        /*函数指针和block的相同和区别

         //相同点

         函数指针和block都是指向了内存一段代码段调用类似

          //不同点

         1.函数指针是一个指针变量这个变量存放的是函数名 也就是函数的首地址赋值时 直接把函数名字赋值给函数指针变量

         这个指针变量一般存储在栈中

         block是一个对象这个对象的生命周期非常复杂 一般存储在栈中,但这个对象copy后的一份存储在堆中,另外block接收是一个完整的代码快,而不是一个随意的变量或者常量

         2.block 能都给引用block以外的变量 函数指针不可以什么意思呢?

         看这样一段代码

         int c = 2;

         Sum2 sum2 = ^(int a ,int  b){

            return a + b + c;

          };

         c这个变量在宿sum2 这个block变量以外但是 sum2 block内部可以引用

        */

    }

    return0;

}

// 运行结果

sum1 = 5

sum2 = 5

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值