您的位置:首页 > 编程语言 > C语言/C++

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语言的半壁江山,所以很多地方都得用到函数指针,那么在实际中我们应该怎么来应用呢,且看后续的更新。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: