函数指针

来源:互联网 发布:2016进出口数据 编辑:程序博客网 时间:2024/06/06 08:28

一. 定义:

函数指针是指向函数的指针变量,即本质是一个指针变量。

int func(int); /*声明func函数*/int (*f) (int); /* 声明一个函数指针 */f=func; /* 将func函数的首地址赋给指针f */

二. 函数指针变量的声明:

就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。
     在C系列语言中,任何一个变量,
总是要先申明,之后才能使用的

指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:

类型说明符 (*函数指针变量名)(参数)

这个特殊的指针指向一个返回整型值的函数。指针的声明必须和它指向函数的声明保持一致。

如在之前看到的,整个函数指针变量f的申明格式如同函数func的申明处一样,只不过——我们把func改成(*f)而已,这样就有了一个能指向func函数的指针f了。(当然,这个f指针变量也可以指向所有其它具有相同参数及返回值的函数了。)

指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。
    例如:

int (*fptr)();//函数指针fptr,函数返回整型int * fptr();//函数fptr(),返回指向整型的指针

三. 函数指针的赋值:

函数的地址赋值给函数指针,可以采用下面两种形式:

fptr=&Function;fptr=Function;
取地址运算符&不是必需的,分析如下:

1. 其实,Function的函数名与fptr函数指针都是一样的,即都是函数指针Function函数名是一个函数指针常量,而fptr是一个函数数指针变量,这是它们的关系。
2.
函数名也可以这样调用(*Function)(10),但这样书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许Function(10);这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。
3. 为统一起见,fptr函数指针变量也可以fptr(10)的形式来调用,同时必须包含一个圆括号括起来的参数表
4. 赋值时,即可FunP=&MyFun形式,也可FunP=MyFun。

四. 函数指针的调用:

可以采用如下两种方式来通过指针调用函数

x=(*fptr)();x=fptr();
第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。


参考:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html

      http://hi.baidu.com/bellgrade/item/4a4334e8132eed0965db00a6

0 0
原创粉丝点击