函数指针#
- 获取函数地址
- 只要使用函数名。如果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 = pa[0](av, 3);或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](av, 3); (pd)[i](av, 3);为返回指针指向的值。
- 第二种使用指针调用((pd)[i])(av, 3); ((*pd)[i])(av, 3);为返回指针指向的值。
- 类的虚函数通常使用了这样的技术。
- 还可以使用typedef进行简化
posted @
2019-12-02 23:07
yangzixiongh
阅读(
136)
评论()
编辑
收藏
举报