/* 函数指针: 指向函数的指针 指针函数: 返回值是指针类型的函数 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(34,438); //指针变量间接访问 //函数指针的定义: //定义了一个函数指针变量,名称是p // p 可以指向返回值是int 并且有两个int类型的参数的函数 // int (*p)(int x,int y); // p = max; // // m = p(34,438); //间接访问 // NSLog(@"m = %d",m); //p是一个指针变量? 还是一个类型? // 此时把 返回值是int 有两个整型参数的函数,起了别名,别名是p typedef int (*p)(int x,int y); //p = max; p pmax; pmax = max; NSLog(@"pmax = %d",pmax(34,438)); } int main(int argc, const char * argv[]) { @autoreleasepool { //myblock 是没有参数,没有返回值的block类型的变量 // void (^myblock)(); //1,给没有参数,没有返回值的block起别名 //myblock 是一个类型 //给没有返回值,没有参数的代码块,起一个别名 myblock typedef void (^myblock)(); //定义一个返回值是void没有参数的block变量,名称为b1 myblock b1; //b1是一个变量,myblock是一个类型 //给block变量赋值 b1 = ^{ NSLog(@"test b1"); }; //执行block b1(); //2,给有参数的block起别名 typedef void (^blockType1)(int x,int y); //使用别名定义block变量,并且初始化 //blockType 是一个类型 //bt是一个变量 blockType1 bt = ^(int x,int y){ NSLog(@"x+y = %d",x+y); }; bt(34,23); //3,给有参数,有返回值的block起别名 typedef int(^blockType2) (int x,int y); //定义有参数,有返回值的block变量,名称是b2 blockType2 b2 = ^(int x,int y){ return x+y; }; int s = b2(23,10); NSLog(@"s = %d",s); } return 0; } |