首页 > 其他 > 详细

函数指针

时间:2019-12-03 02:14:17      阅读:96      评论:0      收藏:0      [点我收藏+]

函数指针

  • 获取函数地址
    • 只要使用函数名。如果think()是一个函数。think就是该函数的地址。
  • 声明一个函数指针
    • 声明指向某种数据类型的指针时,必须指定指针指向的类型。
    • 声明指向函数的指针时,也必须指定指针指向的函数类型。
    • 需要指定函数的返回类型和参数列表。
    • 例如一个函数 double pam(int a);
    • 该函数指针应声明为double (* pf)(int);
    • 注意与double * pf(int)的区别。前面的是函数指针,后面的是返回值为double *的函数。
    • 正确声明之后,赋值pf = pam;
    • 如果pf和pam的返回类型或参数列表不同,编译器将报错。
  • 使用函数指针调用函数
    • 调用函数指针指向的函数可以使用double y = (* pf)(5);
    • c++中也可以使用double x = pf(5);
    • 为何(* pf)与pf等价是一个问题。
  • 声明函数组
    • 例如const double * (pa[3])(const double , int) = {f1, f2, f3};(f1,f2,f3是函数地址);
    • 自动类型推断只能用于单值初始化,不能用于初始化列表。
    • 调用函数组中的函数const double * px = pa0;或const double * py = (*pa[1])(av, 3);
    • 创建整个函数组的指针
    • auto pc = &pa;
    • const double ((pd)[3])(const double , int) = &pa;
    • pa和&pa之间的差别
      • 对于pa代表数组中第一个元素的地址
      • &pa代表整个数组的地址
      • 想要得到数组第一个元素的值需要对pa解除一次引用
      • 但需要对&pa做两次引用
      • **&pa = *pa = pa[0]
  • 调用函数组中的函数指针
    • 较简单的方法(pd)i; (*pd)i;为返回指针指向的值。
    • 第二种使用指针调用((pd)[i])(av, 3); ((*pd)[i])(av, 3);为返回指针指向的值。
    • 类的虚函数通常使用了这样的技术。
  • 还可以使用typedef进行简化

函数指针

原文:https://www.cnblogs.com/yangzixiong/p/11973890.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!