函数指针(源自c++ Primer)

来源:互联网 发布:java软件编程课程 编辑:程序博客网 时间:2024/05/16 23:01

      函数指针式指向函数而非指向对象的指针。想其他指针一样,函数指针也只想某个特定的类型。函数类型有其返回类型以及形参表确定,而与函数无关:

     

这个语句是讲pf声明为指向函数的指针,它所指向的函数带有两个const string &类型的参数和bool类型的返回值。

 

     1. typedef 简化函数指针的定义

      函数指针相当的冗长。使用typedef 为指针类型定义同义词,可将函数指针的使用大大的简化:

该定义表示cmpFcn是一种指向函数的指针类型的名称。该指针类型为“指向返回bool类型并带两个const string引用形参的函数的指针”。在要直接使用函数指针cmpFcn即可,不必每次都把整个类型声明全部写出来。

 

     2.指向函数指针的初始化和赋值

      在应用函数名又没有调用该函数时,函数名将被自动解释向函数的指针。假设有函数:

       // compares lengths of two strings

       bool lengthCompare(const sting &,const sting &);

除了用作函数的调用的左操作数以外,对lengthCompare的任何使用都被解释为如下类型的指针:

     

可使用函数名对函数指针做初始化或赋值:

   

此时,直接引用函数名等效于在函数名上取地址操作符:

   cmpFun pf1 = lengthCompare;

 

 3. 通过指针调用函数

    指向函数的指针可用于调用它所指向的函数。可以不需要使用解引操作符,直接通过指针调用函数:

 

4. 函数指针形参

    函数的形参可以使指向函数的指针。这种形参可以用以下两种形式编写:

 

 5. 返回指向函数的指针

    函数可以返回指向函数的指针,但是正确写出这种返回类型是相当不容易的。

要理解该声明的含义,首先观察:

   ff(int)

将 ff 声明为一个函数,它带有int的参数。该函数返回

     int (*)(int *, int);

 

 

 

原创粉丝点击