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. Web API Login with Cookie

    public HttpWebResponse InitiliazeWebRequest() { string responseData =string.Empty;//string url = Get ...

  2. POJ 1556 计算几何+最短路

    代码1: #include<iostream> #include<stdio.h> #include<string> #include<string.h> ...

  3. 使用Cloudsim实现基于多维QoS的资源调度算法之中的一个:配置Cloudsim环境

    Cloudsim是一款开源的云计算仿真软件,它继承了网格计算仿真软件Gridsim的编程模型,支持云计算的研究和开发.它是一个自足的支持数据中心.服务代理人.调度和分配策略的平台,支持大型云计算的基础 ...

  4. C#中关于DBNULL的处理方法

    从数据库中获取数据有些会是空值的,这时一不注意就会被坑了…… String.Concat(db.可能为DBNULL的值) 在这种情况下,如果是DBNULL,得到的会是""

  5. [译] 使用Using Data Quality Services (DQS) 清理用户数据

    SQL Server 2012 Data Quality Services (DQS)  允许你使用自己的知识库来清洗数据. 在本文中我会展示一个简单示例. 使用DQS清理步骤如下: A. 建立DQS ...

  6. XML CDATA(Mybatis mapper and XML)

    Tip:must be followed by either attribute specifications, ">" or "/>". 所有 X ...

  7. Java 中 静态方法与非静态方法的区别

    静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方 ...

  8. ecmall 点滴记录

    /* 取得列表数据 */ $model_wish =& m('wish'); $wish= $model_wish->find(array( 'conditions' => 'us ...

  9. C++_内部类

    C++ 内部类和外部类之间的相互调用

  10. 本地搭建开发环境开发redis程序

    1.因为redis是部署在linux环境下,远程要想连接到linux,首先将linux防火墙关闭: service iptables stop