黑马程序员技术交流社区

标题: blocks函数等号前后两个参数有什么区别(这不是水贴) [打印本页]

作者: 3677065    时间: 2014-8-25 14:17
标题: blocks函数等号前后两个参数有什么区别(这不是水贴)
int (^myBlock) (int) = ^(int num){
2     return num * num;
3 }


以这个为例,我看不到等号前后两个参数有什么区别,为什么要这样写呢?

(这不是水贴)
作者: 庄得超    时间: 2014-8-25 15:26
首先,等号左边是函数的声明,等号右边是函数的实现。
(^myBlock)  函数指针的名称,其前面的int 表示函数的返回值类型,后面的(int)表示该函数有一个参数,且参数类型是int。等价于下面这段代码:
typedef int (^func)(int) myFunction;
myFunction myBlock = ^(int num){
        return num * num;}

作者: xiniuniu    时间: 2014-8-25 15:29
等号左边的括号只是说明这个block变量的类型。以你的例子为例,说明myBlock变量所指向的是一个返回值为int,参数也为int的代码块。而等号右边则是代码块中真正要用到的实参参数列表。所以参数类型后边必须指定一个名字
作者: SailY    时间: 2014-8-31 18:53
这里有三个int,
1、
先说当中一个int,这个int意思是myblock需要个参数,这个参数是int型,告诉内存,我需要一个int大小的空间,相当于声明,声明可以不要参数,只要类型。
2、然后是右边的int,这个地方相当于定义,用num接收传递过来的参数。
3、左边的int,由于num是int型,num*num也是int型,返回的就是int型,假如说返回的int值需要赋值给P,P肯定就是int型。


因为用num接收的那个值就是int型,所以右边的int就是int型,然后又要声明,所以当中的也是int,然后返回值也是int,所以前面的类型也是int




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