一、指针函数

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;    //错

  

  

  

指针函数(Pointer Function)和函数指针(Pointer to Function或Function Pointer)的更多相关文章

  1. C++-函数与指针的关系(回调函数)

    1.函数类型 C语言中的函数有自己特定的类型 函数的类型由返回值,参数类型和参数个数共同决定 ★ int add(int i, int j)的类型为int(int, int) C语言中通过typede ...

  2. callback回调函数理解 相当于this指针

    1.callback函数在微软的官方手册中是这样定义callback函数的:“callback函数是由应用程序定义而由操作系统调用的函数”.   凡是由用户设计而却由windows系统调用的函数,统称 ...

  3. 【C++编程基础】(1)—— 函数原型声明、函数模板、引用、const 常引用、const 常量指针

    一.函数原型声明: 1.函数声明告诉编译器函数的名称,和如何调用函数(返回类型和参数):函数定义提供了函数的实际主体. 2.强制性的:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前 ...

  4. 《征服 C 指针》摘录4:函数 与 指针

    一.指向函数的指针 函数名可以在表达式中被解读成“指向函数的指针”,因此,正如代码清单 2-2 的实验那样,写成 func 就可以取得指向函数的指针. “指向函数的指针”本质上也是指针(地址),所以可 ...

  5. 《征服 C 指针》摘录5:函数形参 和 空的下标运算符[]

    一.函数的形参的声明 C 语言可以像下面这样声明函数的形参: void func(int a[]) {     // ... } 对于这种写法,无论怎么看都好像要向函数的参数传递数组. 可是,在 C ...

  6. C语言中,数组名作为参数传递给函数时,退化为指针

    C语言中,数组名作为参数传递给函数时,退化为指针   C语言中,数组名作为参数传递给函数时,退化为指针:需要数组大小时, 需要一个参数传数组名,另一个传数组大小. 数组名做函数参数时,就相当于指针了. ...

  7. C++函数的传入参数是指针的指针(**)的详解

    要修改变量的值,需要使用变量类型的指针作为参数或者变量的引用.如果变量是一般类型的变量,例如int,则需要使用int 类型的指针类型int *作为参数或者int的引用类型int&.但是如果变量 ...

  8. Callback函数详解(我感觉,回掉函数的本质是函数指针,在业务做循环处理的时候,调用一下通知外部)

    2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享.希望对大家有所帮助. 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度 ...

  9. C++反汇编第三讲,反汇编中识别虚表指针,以及指向的虚函数地址

    C++反汇编第三讲,反汇编中识别虚表指针,以及指向的虚函数地址 讲解之前,了解下什么是虚函数,什么是虚表指针,了解下语法,(也算复习了) 开发知识为了不码字了,找了一篇介绍比较好的,这里我扣过来了,当 ...

随机推荐

  1. Hibernate4 拦截器(Interceptor) 实现实体类增删改的日志记录

    转自:https://blog.csdn.net/he90227/article/details/44783099 开发应用程序的过程中,经常会对一些比较重要的数据修改都需要写日志.在实际工作的工程中 ...

  2. vs2010统计代码行数

    参考:http://www.cnblogs.com/zfanlong1314/archive/2013/03/08/2950100.html 正则表达式:^:b*[^:b#/]+.*$ 文件类型:*. ...

  3. Windows NT/NTLM 加密

    Hash,一般翻译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是散 ...

  4. HDU 3944 DP? (Lucas定理)

    题意:在杨辉三角中让你从最上面到 第 n 行,第 m 列所经过的元素之和最小,只能斜向下或者直向下走. 析:很容易知道,如果 m 在n的左半部分,那么就先从 (n, m)向左,再直着向上,如果是在右半 ...

  5. tomcat 配置图片虚拟路径不起作用解决办法

    最近在做一个小项目,用到了图片上传服务器,以前尝试过实现这个功能Demo,虽然基本功能没有问题,但是很不完善,当时也有在博客记录, 地址如下: http://www.jb51.net/article/ ...

  6. bzoj 2111: [ZJOI2010]Perm 排列计数【树形dp+lucas】

    是我想复杂了 首先发现大于关系构成了一棵二叉树的结构,于是树形dp 设f[i]为i点的方案数,si[i]为i点的子树大小,递推式是\( f[i]=f[i*2]*f[i*2+1]*C_{si[i]-1} ...

  7. [POI2008]Sta

    Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output ...

  8. 递推+高精度+找规律 UVA 10254 The Priest Mathematician

    题目传送门 /* 题意:汉诺塔问题变形,多了第四个盘子可以放前k个塔,然后n-k个是经典的汉诺塔问题,问最少操作次数 递推+高精度+找规律:f[k]表示前k放在第四个盘子,g[n-k]表示经典三个盘子 ...

  9. PHP获取今天内的时间 今天开始和结束的时间戳

    $t = time(); $start = mktime(0,0,0,date("m",$t),date("d",$t),date("Y", ...

  10. Css 基本的规则写法

    样式表的写法: css的语法由一些标志构成,就是一个基本的样式表由选择器,属性和属性值构成.Css有标准的写法规则标准的css写法: h1 { Font-family:黑体;} h1:表示选择符Fon ...