C++学习之函数指针
         和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址。通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用。
一、函数地址
    函数地址的获取很容易:只要使用函数名即可。也就是说,如果think()是一个函数,那么他的函数名think就是该函数的地址,要将函数作为参数进行传递,必须传递函数名字,一定要区分传递的是函数的地址还是函数的返回值:如下面所示:
       prosess(think):传递的是think函数的地址;
       prosess(think()):传递的是think函数的返回值;
二、声明函数指针
       声明指向某种数据类型的指针的时候,必须指定指针指向的类型。同样,声明指向函数的指针的时候,也必须指定指针指向的函数类型。这意味着声明应该指定函数的返回类型以及函数的特征值(参数列表)。也就是说,声明应该像函数原型那样指出有关函数的信息:
       double pam(int);
       则正确的指针类型声明如下:
       double (*pf)(int);pf是指向pam函数的指针,而*pf则指向的是pam()函数;
       为了提供正确的操作符优先级,必须在声明中使用括号将*pf括起来,括号的优先级比*操作符高,因此*pf(int)意味着pf()是一个返回指针的函数,而(*pf)(int)则意味着pf是一个指向函数的指针:
三、使用指针来调用函数
       使用指针调用函数的线索来自指针声明。前面说过,(*pf)扮演的角色和函数名相同,因此使用(*pf)的时候,只需要将它看作是函数名即可.

C++学习之函数指针的更多相关文章

  1. C/C++学习:函数指针

    曾经在书上看到函数指针相关的都没怎么重视.可是近期在实际的工作中却派上了用场.所以认真地学习了一遍. 函数指针的申明 申明一个函数指针非常easy,就是将函数申明中的函数名替换为一个指针就可以: C/ ...

  2. C语言学习019:函数指针

    在C语言中,函数名也是指针变量,比如创建了一个add(int n,int m)的函数的同时也创建了一个名为add的指针变量,因此我们可以把函数指针当作一种类型为它赋值.当作参数传递等操作 C语言创建函 ...

  3. (C/C++学习)16.函数指针

    说明:函数指针,顾名思义就是指向函数的指针.C/C++中函数名的本质其实就是一段代码段空间的首地址. 1.定义 如下的 pf 就是一个函数指针,指向所有返回类型为 int,并带有两个 const in ...

  4. c语言指针函数与函数指针

    例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...

  5. 1、C语言中的函数指针

    一 通常的函数调用 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun ...

  6. C语言函数指针(转载)

    二.通常的函数调用 一个通常的函数调用的例子:/* 自行包含头文件 */void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */int main(int a ...

  7. C语言函数名与函数指针详解

    一.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(in ...

  8. 彻底搞定C指针--“函数名与函数指针”

    函数名与函数指针   一 通常的函数调用 一个通常的函数调用的例子: //自行包含头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); 点击打开链 ...

  9. 彻底搞定C指针-函数名与函数指针【转】

    转自:http://blog.csdn.net/a1232345/article/details/43524371 函数名与函数指针 一 通常的函数调用    一个通常的函数调用的例子://自行包含头 ...

随机推荐

  1. Unity大中华区主办 第二届Unity 游戏及应用大赛 实力派精品手游盘点

    Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.包含如今时 ...

  2. 如何删除Oracle数据库

    1>点击开始找Oracle的目录,-->点击[Universal Installer],打开点击[卸载产品] 2>除了oracle_home1 不点外,其他的都勾选. 3>再点 ...

  3. 关于css3中before与after用单冒号还是双冒号的疑虑

    在 CSS3 中为了区别伪元素和伪类为伪元素使用了双冒号,因此如果使用了 display 或者 width 等属性时使得显示脱离了原本元素后,建议按照标准双写.

  4. linux下的进程、网络、性能监控命令

    进程监控 端口   1)netstat -anp | grep xxx   2)lsof  -i:<port> 句柄    lsof  -n | grep xxxx 线程栈   1)gst ...

  5. trim()函数IE7/8不兼容

    js中重写trim()函数 <script type="text/javascript">     String.prototype.trim = function() ...

  6. memset memcpy函数

    memset 函数 1.其头文件为: #include<memory> 或者#include<string> 2.原型    看清是对每个字节,不是其类型 void *mems ...

  7. C++中重载、重写(覆盖)和隐藏的区别实例分析

    这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计 ...

  8. ubuntu12.04常见错误总结

    1.通过终端安装程序sudo apt-get install xxx时出错: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource ...

  9. iOS动态运行时方法

    在某些时候,程序可能需要根据获取的参数来决定调用的方法. 要实现这样的功能,就需要使用到动态运行时方法了. 首先需要定义好接口,以便调用. 然后就是动态调用定义好的方法. 这里有两种方法, 第一种: ...

  10. Pig Latin儿童黑话(java)

     ●假设单词以辅音字母開始,将词首的辅音字母字符串(第一个元音字母前的全部字母)从单词的开头移动到末尾,然后加上后缀ay,这样就形成了它的pig  latin. ●假设单词以元音字母開始,仅仅须要 ...