C/C++高阶语法:函数指针及其应用
2015-11-02 21:02
302 查看
1、在讲函数指针之前,我们先明白C/C++中常见的指针函数。
int * GetData(int num);形如上面的形式的为指针函数, 指针函数实际上就是函数,只是返回类型为指针。在结构体的深度拷贝中 createaT()函数便是一个指针函数,用来得到结构体对象。这种用法很普遍(基本上是这么用的),我们在打下基础的时候要把这一点给掌握好了。
2、函数指针的形式及声明定义:
之前说过数组是一种类型,其形式如下:int [10];
char [12];所以我们可以这样的定义数组类型:
typedef int (array_int)[10];
typedef char (array_char)[12];并且可以毫无顾虑的使用定义的数组类型来定义新的对象(这里的对象不仅仅是指由我们自己定义的类型,任何内置类型以及我们自定义的类型 所什么的标识符都是对象):
array_int a_int;
array_char a_char;
同样的道理,我们可以定义函数类型:
typedef int _Func_(int ,char);
typedef void _Func_void_(int ,double);然后我们可以毫无顾虑的使用定义的函数类型来定义函数:
_Func_ *myFun1; _Func_void *myFun2; int getdate(int,char); myFun1 = getdate; void print_array(int,double); myFun2 = print_date;或者是我们可以直接定义函数指针类型:
typedef int (*pFunc)(int,int); typedef void (*_pFunc_)(int,double);使用定义的函数指针类型来定义函数指针:
int getdata(int,int); void print_data(int,double); pFunc Func_get = getdata;//声明时就立即初始化 _pFunc_ func_print;//先声明 func_print = &print_data;//然后初始化注意,上面func_print 在初始化时使用的是 &print_data ,实际上有没有取地址符都行,这是编译器设定的。
3、定义和声明搞清楚了,我们就来看一下简单的应用:
这是一个简单的程序,用来求圆的面积:
double square(double r) { return r*r; //这只是一个简单的函数,用来返回一个数的平方 }
下面这个是关键:
double Area(double r,double(*p)(double)) { return PI*p(r); }
double(*p)(double)表示使用函数指针做函数参数,然后在函数内部使用该函数指针。
4、类似的这样的例子有很多,网上不胜枚举。但是这样的程序有点语言基础的都能写出来,还没有什么太大的作用。本文写的目的当然不是给大家讲函数指针的实际应用,这里只是给大家讲一些函数指针的基础的只是。我们知道函数指针占据了C语言的半壁江山,所以很多地方都得用到函数指针,那么在实际中我们应该怎么来应用呢,且看后续的更新。
相关文章推荐
- 遇见gtest--事件
- C/C++中的内存补齐机制(2)
- C++学习——构造函数初始化列表
- iOS 开发 c语言阶段考试题
- C++实现单链表逆置
- C++学习——copy构造函数及浅拷贝和深拷贝
- c++ string类详解
- 爬爬爬之路:OC语言(六) Block语法简介
- 将字符串中的空格替换为%20
- 简单的二叉树创建及其基本的运算(C语言)
- Lake Counting 算法 第四集
- 使用libxml读取分析配置文件
- VC C/C++ 函数调用约定
- Effective C++(四)
- 使用VC++类库进行数值分析
- C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别
- C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别
- Dev C++报告窗口不能自动弹出
- C++11新版本
- C++ 宏定义动态加载、工厂模式