C/C++中的函数指针

<分析>:

                         int f(int );

                         int (*pf)(int) = &f;---pf是函数指针,指向函数f

(1)函数指针和普通指针一样,必须先被初始化为指向某个函数的指针,然后才能使用;

(2)函数指针与所指向的函数必须返回类型和形参都精确匹配;

(3)初始化的时候,&是可选的,因为函数名在使用的时候编译器总会把它转换为函数指针,所以以下三个表达式结果是相同的:

             int ans;   ans = f(25);   ans=(*pf)(25);     ans = pf(25);

(4)函数指针可以用来实现回调函数和转移表;

(5)回调函数:一个指向回调函数的指针作为参数传递给另一个函数,后者使用这个指针调用回调函数, 用void类 型去定义回调函数,这样可以实现通用型函数(不同类型),类的成员函数不可以作为回调函数;

(6)转移表:像switch语句一样执行选择,由一个函数指针数组组成,这些函数具有相同的原型,函数 通过下标选择某个指针,再通过指针调用对应的函数。

(7)当函数指针作为函数形参的时候,可以写成指针类型,也可以写成函数类型。

    形参为函数类型:

             voiduseBigger(const string &,  const string &,  bool(const string&,conststring&));

    形参为函数指针类型:

             voiduseBigger(const string &,  const string &,  bool(*)(const string&,conststring&));

(8)当函数指针作为函数的返回值时,只能写成函数指针类型,而不能写成函数类型:

                          int (*ff(int))(int*,int)

---ff是一个函数,带有一个参数int,它的返回类型是一个函数指针,该函数指针指向的函数返回类型为int型,参数为int*和int;

(9)c++容许使用函数指针指向重载函数,但是指针类型必须与重载函数精确匹配。

猜你喜欢

转载自blog.csdn.net/zdplife/article/details/50939778