zoukankan      html  css  js  c++  java
  • 指针函数(Pointer Function)和函数指针(Pointer to Function或Function Pointer)

    一、指针函数

    1、解释:指针函数很好理解:简单来说,就是一个返回指针的函数,本质是一个函数。如:

     int fun(int x,int y);    //这是一个普通函数的声明,返回值是一个int类型,是一个数值。

     int *fun(in x,int y);  //这就是指针函数,返回值是一个int类型的指针,是一个地址。

    2、指针函数的写法:

     int *fun(in x,int y);

       或int * fun(in x,int y);

       或int* fun(in x,int y); 

    二、函数指针

    1、解释:指向数据区域的指针,称为数据指针。指向代码区域的指针称为指向函数的指针,简称函数指针

      函数指针,其本质是一个指针变量,只不过该指针指向的是函数而非对象,和其他指针一样,函数指针指向某种特定类型,函数的类型由它的返回类型和形参类型共同决定,与函数名无关,例如:

      //比较两个string对象的长度

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

      该函数的类型是bool (const string &, const string &)。要想声明一个可以指向该函数的指针,只需要指针替换函数名即可:

      bool (*pf) (const string &, const string &);    //该指针还未初始化

      这句语句的意思是,pf就是一个指向函数的指针,其中该函数的参数是两个const string的引用,返回值是bool类型。

      注意:*pf两边的括号必不可少。如果不写这个括号,则pf就是一个返回值为bool指针的函数了,大家可以对比上面的指针函数。

    2、函数指针的定义方法:

     int (*p)(int , int );   //未初始化

     或:int (*p)(int , int ) = q ;   //在定义函数指针时初始化,其中q应该与指针p所指向的函数类型相同。

     或:int q(int);

       int (*p)(int);

       p=q;

    3、使用函数指针

      当我们把函数名作为一个值使用时,该函数自动地转换成指针。例如:按照如下形式我们可以将lengthCompare的地址赋给pf:

      pf = lengthCompare;    //pf指向名为lengthCompare的函数

      pf = &lengthCompare;    //同上面等价的赋值语句

      此外,我们还可以直接使用函数指针调用该函数(下面三行是等价的):

      bool b1 = pf("Hello", "Goodbye");

      bool b2 = (*pf)("Hello", "Goodbye");

      bool b3 = lengthCompare("Hello", "Goodbye");

    注:函数指针本身也是一种数据类型,如:

        int (*) (int);

      是int (int)型函数的指针类型,其中的“(*)”的括号也是不能省略的。

      函数指针的定义形式看起来比较复杂,所以通常采用typedef来简化。例如:

      typedef int  (*Fun) (int a , int b);  

      表示声明了一个函数指针类型。注意,此处不是定义函数指针实体。因此:

      int m(int , int);

      Fun funp = m;    //ok

      Fun = m;    //错

      

      

      

  • 相关阅读:
    部署 HTTPS 访问 ( https:// )
    Jquery百宝箱
    Python 模块和包
    Python 缓存
    Python 内存管理和回收
    Python上下文管理器
    MySQL 表约束
    MySQL 字符集和校验规则工作原理
    MySQL基础笔记整理
    Redis 数据结构 之 SDS
  • 原文地址:https://www.cnblogs.com/SupremeBoy/p/10269009.html
Copyright © 2011-2022 走看看