/*
函数指针的回顾
c的类型:基本类型,空类型,构造类型,指针类型,定义类型。
typedef int a;给int起别名,别名为a
typedef Arr[4]; Arr a1 定义一个长度为4的整形数组。
函数指针:指向函数的指针。---->
int max(int x,int y){
return x>y?x:y;
}
指针函数:返回值是指针类型的函数。----->
*/
#import <Foundation/Foundation.h>
int max(int x,int y){
return x>y?x:y;
}
void test2(){
// 调用函数
// 使用函数名调用函数,直接访问
// 函数名,存放的是函数的额首地址
int m = max(32,67);
// NSLog(@"m = %d",m);
// 指针变量简直访问
// 函数指针的定义:定一个函数指针变量,名称是p 如下,简便的做法:
// 直接把原来的函数名拖过来,函数名用(*p)来代替。这样就
// p可以指向返回值是int,并且有两个int类型的参数的函数
// int (*p)(int x,int y); //表示有两个参数的函数指针!括号内的东西后读,函数指针!
// p =max; //这个函数指针指向max这个函数,
// m=p(43,12);
// NSLog(@"m = %d",m);
//p是一个指针变量?还是一个类型?
// 此时,返回值是int,有两个整形参数的函数,起来别名,别名是p
typedef int (*p)(int x,int y);
// 此时p 是一个类型了不能 p = max;
p pmax; //此时p是一个类型了(一个函数指针,指向max的这个指针)
pmax = max; //让用p定义的这个指针指向max;
NSLog(@"pmax = %d",pmax(32,67));
//
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
//myBlock是没有参数,没有返回值的block类型的变量
// void (^myBlock)();
typedef void (^myBlock)();
myBlock b1;
b1 =^{
NSLog(@"test b1");
};
b1();
//给有参数的block起别名
typedef void (^blockType1)(int x,int y);
//使用别名定义block变量,并且初始化
//blockType 是一个类型
//bt是一个变量
blockType1 bt = ^(int x,int y){
NSLog(@"x+y = %d",x+y);
};
bt(12,67);
// 3,给有参数,有返回值的block起别名;
typedef int (^blockType2) (int x,int y);
//定义有参数,有返回值的block变量,名称是b2
blockType2 b2 = ^(int x,int y){
return x+y;
};
int a = b2(45,76);
NSLog(@"a = %d",a);
}
return 0;
}
|
|