cpp: 使用typedef定义函数指针
2017-12-10 21:35
344 查看
Java在对于
oop的封装上面抽象程度非常的高;但是对于函数,
java里面的函数或者方法,可以说是非常基础或者低级。纵观
java的语言特性,没有对函数有更高程度的封装。
但是,除了在
oop方面的抽象,在函数方面,也可以有很高程度的抽象。这一点,在
javascript / python / c /c++上面就有所体现。
如果之前没有接触过对于函数的抽象,那么第一次接触会觉得比较难以理解。比如
c++中的函数指针的概念,函数指针数组,指向函数指针的数组等,都是不好理解的。
还好
c++中提供了自定义类型的方式,也就是
typedef。通过
typedef,可以把复杂的类型进行封装,以便于理解和使用。
对于typedef函数指针用法,推荐看这篇博客,讲解的非常清楚到位。甚至比《C++ Primer Plus》上面讲解的更清楚透彻。
下面我也来给出我的理解和使用示例:
#include <iostream> /* char (*pFun)(int); char glFun(int a) { ; } int main() { pFun = glFun; (*pFun)(2); return 0; }*/ int (*pAdd)(int, int); // 定义函数指针 pAdd , pAdd不是一个函数,而是函数指针 typedef int (*pFunAdd)(int, int); // 定义一个新的类型 // pFunAdd 到底是什么类型呢?是一个函数指针类型, // 其中被指向的函数是参数为2个int,返回类型为int的函数. int add(int x, int y); int sum(int x, int y); void useArr(pFunAdd arr[], int size); /** * 定义一个新的类型,如同int,char一样,类型名:pFuncUseArr */ typedef void (*pFunUseArr)(pFunAdd *arr, int size); // define a type int main() { using namespace std; pAdd = add; int zz = (*pAdd)(3, 4); cout << "zz=" << zz << endl; cout << "# # # # # # # # # # # # " << endl; pFunAdd funAdd = add; int q = funAdd(5, 6); cout << "q =" << q << endl; cout << "函数指针数组:" << endl; pFunAdd arr[3] = {add, add, sum}; useArr(arr, 3); cout << "函数指针-- " << endl; pFunUseArr pfu = useArr; pfu(arr+1, 2); return 0; } void useArr(pFunAdd arr[], int size) { int a = 3; int b = 4; using namespace std; for (int i = 0; i < size; ++i) { pFunAdd pf = arr[i]; cout << "i=" << i << " , pf=" << pf << ":\t" << pf(a, b) << endl; } } int add(int x, int y) { return x + y; } int sum(int x, int y) { return x * x + y * y; }
输出如下:
zz=7 # # # # # # # # # # # # q =11 函数指针数组: i=0 , pf=1: 7 i=1 , pf=1: 7 i=2 , pf=1: 25 函数指针-- i=0 , pf=1: 7 i=1 , pf=1: 25 Process finished with exit code 0
可以看到如果要定义一个对应函数为
int add(int,int);的函数指针的方式为:
typedef int (*pFunAdd)(int, int);,通过这样一个类型定义,就定义了一个函数指针,然后就可以如同
int,char一样去使用了。
pFunAdd funAdd = add; // 定义一个 pFunAdd 类型的变量 funAdd ,并赋值为 add. //(add是一个函数名,也就是一个函数指针) int q = funAdd(5, 6); // 如同使用add 一样去使用 funAdd 就好了。
以上,就是使用
typedef去定义函数指针的方式。~
相关文章推荐
- 使用typedef定义指向函数的指针
- typedef函数指针与函数类型的定义及使用方式
- C++学习14:使用typedef定义函数指针类型
- 使用typedef简化函数指针的声明及定义
- typedef函数指针与函数类型的定义及使用方式
- 使用typedef定义指向函数的指针
- 函数指针的定义及使用
- (转)关于C++中函数指针的使用(包含对typedef用法的讨论)
- C语言技巧--在结构体中使用函数例子(定义一个指向函数的指针)
- typedef定义函数指针
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- typedef使用大全(指向函数的指针)
- typedef使用大全(指向函数的指针)
- 使用typedef简化函数指针的声明
- typedef定义函数指针
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- typedef使用大全(指向函数的指针)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- typedef使用(指向函数的指针)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)