大学学C/C++时候没有认真学好函数指针这一部分内容,最近读ucos的代码是发现到处都用到函数指针,上网随便找了写资料,感觉也不难,呵呵。把整理的资料汇总下,以便别人查找,也便于自己以后复习。都是那些地方引用来的我也不清楚了,如果你是作者,可以告诉我下,谢谢!
指向函数的指针变量
函数的指针是指函数的入口地址,和数组名代表数组的首地址一样,函数名代表函数的入口地址。
若有一个指针变量,存放某一个函数的入口地址,我们可以通过指向这个函数的指针变量来调用函数。
1.定义指向函数的指针变量
形式如下: 类型标识符(*变量标识符)();
类型标识符是指针变量所指向的函数类型,变量标识符是指向函数的指针变量名。
例如:
int(*p)();
定义了一个指向函数的指针变量p,它可以存放一类整型函数的入口地址,程序中把哪一个函数的入口地址赋给它,它就指向哪一个函数。
说明:
(1)定义指向函数的指针变量,可以指向一类函数。
(2)定义指向函数的指针变量时,括号不能省略。
形式int*p()定义的是指针函数头,返回值是指向整型数据的指针值,而不是指向函数的指针变量。
(3)对指向函数的指针变量p,p+i、p++、p--等运算无意义。
2.让指针变量指向函数
定义了指向函数的指针变量,就可以在指针变量与特定函数之间建立关联,让指针变量指向特定函数。
建立关联的方法为: 指针变量一函数名;
说明:
(1)指针变量只能指向定义时所指定的一类函数。
(2)一个指针变量可以先后指向多个不同的函数。
3.利用指针实现函数调用
指针变量一旦指向某函数,利用指针所指向的变量可以实现函数调用。
一般形式:
(* 指针变量)(实参表);
简单的函数指针的应用。
//形式1:返回类型(*函数名)(参数表)
#include<cstdio>
char (*pFun)(int);
char glFun(int a){printf("just a test,hehe/n"); return 'a';}
void main()
{
pFun = glFun;
(*pFun)(2);
}
//形式2:typedef 返回类型(*新类型)(参数表)
typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
//形式三
#include<iostream>
using namespace std;
class CA
{
public:
char lcFun(int a){cout<<"just a test "<<a<<endl; return 'a'; }
};
typedef char (CA::*PTRFUN)(int);
int main()
{
CA ca;
PTRFUN pFun;
pFun=&CA::lcFun;
//ca.lcFun(2);
(ca.*pFun)(2);
return 0;
}