定义返回Block的函数
鉴于Block与函数的相似性,先从返回函数指针的函数入手
返回函数指针的函数
int fun1(int arg)
{
return arg + 1;
}
int fun2(int arg)
{
return arg + 100;
}
int(*generateFun(const char *name))(int)
{
if (name == "fun1")
return fun1;
else
return fun2;
}
int main()
{
int (*fun_ptr)(int) = generateFun("fun2");
int ret = fun_ptr(30);
printf("%d\n",ret);
return 0;
}
函数原型为int(*generateFun(const char *name))(int)
- 最外层为函数返回值的说明,返回值是一个这样的函数指针
int (*)(int) - 里层则为函数名以及函数形参
- generateFun接受const char *形参,并返回一个函数指针(形参为int,返回值为int的函数指针)
返回Block的函数
int (^func())(int)
{
return ^(int count){return count*2;};
}
int main()
{
int (^blk)(int) = func();
int result = blk(12);
printf("%d\n",result);
return 0;
}
函数原型为int (^func())(int)
- 最外层为函数返回值的说明,返回值是一个这样的Block
int (^)(int) - 里层则为函数名以及形参列表
更好的写法
通过typedef,可以有更直观的变现方式
typedef int (^blk_type)(int);
blk_type func()
{
return ^(int count){return count*2;};
}
其实从typedef的表达形式也可以推出函数的定义语法,只是把类型名变为函数名和参数列表。
PS:《Objctive-C高级编程》中87页有第一个代码段有点错误。
定义返回Block的函数的更多相关文章
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...
- python10--函数的来源,优点,定义,组成,使用(定义,调用)函数的分类,函数的返回值
一.函数 # *****# 函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数# -- 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出 ...
- python -- 初始函数 函数的定义,函数的返回值以及函数的参数
1.什么是函数,函数的定义及语法 2.函数的返回值 3.函数的参数 一.函数的定义及语法 函数的定义:定义了一个动作或者功能,是对功能的封装 语法: def 函数名( 形参列表 ): ...
- python27期day09:函数的初始、函数的定义、函数的调用、函数的返回值、函数的参数、作业题。
1.函数的作用:封装代码.大量的减少了重复的代码. 2.全局空间:顶行写的就是全局空间. 图解 : 3.函数的定义: def 是一个关键字.申明要定义一个函数 my_len 函数的名字.遵循变量命名的 ...
- Vue——项目中接口返回值为函数回调,回调函数定义方法(Vue的方法给原生调用)
在接口调用中,有时会返回给我们一个函数回调,来自动执行我们在前端定义好的某个函数(多出现于通过回调的方式传递某个数值).在原生项目中,我们只要提供一下这个方法就好了,通过函数回调会自动执行.问题就出现 ...
- 12-返回指针的函数&&指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...
- C++浅析——返回对象的函数
一.原码分析 1.1 测试代码 为了方便查看拷贝构造函数调用过程,自定义了拷贝构造函数,但啥也没干. class CTEST { public: int m_nData; //Method: publ ...
- js创建对象的三种方法:文本标识法和构造器函数法和返回对象的函数
文本标识法和定义变量差不多,像这样 var obj = {name:'HanMM','2':'Dali'}; 函数构造器法 先创建一个对象函数 function Obj() { this.addre ...
- c 可变参数 定义可变参数的函数
定义可变参数的函数,需要在stdarg.h头文件中定义的va_list类型和va_start.va_arg.va_end三个宏. 定义可变参数函数 va_list ap; //实际是定义一个指针va ...
随机推荐
- Lua使用心得(2)
在lua脚本调用中,如果我们碰到一种不好的脚本,例如: while 1 do do end 那我们的程序主线程也会被阻塞住.那我们如何防止这种问题呢?下面就给出一个解决的办法. 首先为了不阻塞主线程, ...
- SQL Server - 数据库初识
在互联网笔试中,常遇到数据库的问题,遂来简单总结,注意,以 Sql Server 数据库为例. 数据库 数据库系统,Database System,由数据库和数据库管理系统组成. 数据库,Data ...
- C#中使用Sql对Excel条件查询
如何在C#中实现对Excel的条件查询呢? 在使用Sql条件语句对Excel进行查询时,遇到"至少一个参数没有被指定值"的问题,如何解决? 使用OleDbConnection对象创 ...
- Pydev Debugger not working with breakpoints
I have a simple test module: print("fish")print("sticks")It runs pretty fast as ...
- 改变 TMemo 的背景颜色 (Firemonkey)
说明:展示使用程序码改变 Firemonkey TMemo 的背景颜色. 适用:XE6 源码下载:[原創]Memo改背景色_XE6.zip //---------------------------- ...
- Map遍历两种方式
Java代码 Map<String,String> map=new HashMap<String,String>(); map.put("username" ...
- 关于mybatis 的mapper namespace 作用及解析
因为语言惯性,大部分的namespace 在语言级别*来说是作为一种限定性标识来用,起到唯一或一类的标识.来看看语言(以PHP语言为例)上的namespace的作用实例 一.namespace 在PH ...
- 【Asphyre引擎】冒险岛换装Demo升级到最新版PXL
demo代码 (不包含Sprite代码,要Sprite代码请下载之前那个doudou的demo)
- jdbc应用程序连接Oracle rac的URL写法:
1.应用程序连接Oracle rac的URL写法: #Oracle(AMS) jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url ...
- ArcGIS Server 开发实践之【Search类】
开发中整理的.不足之处还请谅解! ----------------------------------------------- Class:Search 调用方式:require(["es ...