A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chunhuayun 中级黑马   /  2015-10-10 08:12  /  6086 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、函数指针
定义格式:
返回类型 (*函数指针名)(参数列表);
【技巧】
1)把函数的声明拷贝过来
2)把函数名换成 (*函数指针变量名)
3)形参名可以不写

【好处】
可以灵活的使用p调用不同的方法
【使用举例】
  1. int add(int a, int b){
  2.     return  a + b;
  3. }
  4. int sub(int a, int b){
  5.     return a - b;
  6. }

  7. int main(int argc, const char * argv[])
  8. {
  9.     //定义一个函数指针
  10.     int (*p)(int,int);//int (*p)(int a,int b);也行,可以省略参数名
  11.     //给函数指针赋值
  12.     p = add;
  13.     //使用函数指针
  14.     int c = p(1,2);
  15.     NSLog(@"c = %d",c);
  16.     //也可以这样使用
  17.     p = sub;//使函数指针指向另一个方法
  18.     c = (*p)(2,1);
  19.      NSLog(@"c = %d",c);
  20.     return 0;
  21. }
复制代码


打印结果:
2015-10-07 14:35:42.955 加强02[1231:303] c = 3
2015-10-07 14:35:42.957 加强02[1231:303] c = 1
【给函数指针取别名】
取别名格式:
typedef 返回类型 (*新类型名)(参数列表);
【用别名定义函数指针格式】新类型名 指针变量名;
上述代码可以有如下改动,其他不用变
  1. //定义一个函数指针
  2.     typedef int (*Func)(int,int);//int (*p)(int a,int b);也行,可以省略参数名
  3.     //给函数指针赋值
  4.     Func p= add;
复制代码
2、block的typedef
【格式】
    typedef 返回值类型 (^newBlockTypeName)(参数列表);
【例子】
    typedef int (^myBlock)(int, int);
【应用举例】
  
  1. //【格式】typedef 返回值类型 (^newBlockTypeName)(参数列表);
  2.     //定义一个有参有返回值的block的别名
  3.     typedef int (^myBlock)(int, int);
  4.     //此时myBlock是一个类型,不再是一个单纯的变量了
  5.     myBlock b1 = ^(int a, int b){
  6.         return a + b;
  7.     };
  8.     NSLog(@"a + b = %d", b1(1,2));
复制代码

打印结果:
2015-10-07 14:45:23.489 加强02[1252:303] a + b = 3

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马