函数指针和block的区别
来源:互联网 发布:什么是数据化 编辑:程序博客网 时间:2024/06/14 21:24
/// 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,constchar * 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
- Block和函数指针的区别
- 函数指针和block的区别
- block和函数指针有什么区别
- block和指针函数
- block和指针函数
- block和函数指针
- block和函数指针的理解
- Block,函数,指向函数的指针的区别
- block (三) 和函数指针有什么区别
- block (三) 和函数指针有什么区别
- 指针函数和函数指针的区别
- 指针函数和函数指针的区别
- 指针函数和函数指针的区别
- 函数指针和指针函数的区别
- 指针函数和函数指针的区别
- 指针函数和函数指针的区别
- 函数指针和指针函数的区别
- 指针函数和函数指针的区别
- Chapter3 Growth of Functions
- 希尔排序
- PureWhite OpenCart 商城自适应主题模板 ABC-0009
- 小赵学习Opencv(3)之高效图像遍历循环
- rhadoop之mapreduce函数
- 函数指针和block的区别
- ios8 使用storyboard 进行自动布局(一)
- 何为不带缓冲的I/O——read & write
- 基础练习 Sine之舞
- Servlet详解之两个init方法的作用
- jvm_内存溢出_Java堆溢出
- 线程函数
- 键盘对应ASCII码
- 排序系列之一