zoukankan      html  css  js  c++  java
  • C++ 指向函数的指针和递归

    前言:

    函数也有地址, 函数的地址时存储其机器语言代码(即二进制的字节码)的内存的开始地址.通常, 这鞋地址对用户而言, 既不重要, 也没有什么用, 但是对程序却很有用

    当知道地址之后, 就可以声明指针, 指针就可以指向函数的地址, 有了地址和指针, 就可以将函数的指针传作为参数传递给另一个函数.

    与直接调用另一个函数不同的是, 它允许在不同的时间传递不同的函数地址. 这意味着可以在不同得时间使用不同的函数.

    当我们要将函数的地址  作为参数 传给另外一个函数时, 需要有以下三个条件才能达到要求:

    1. 获取函数的地址.

    2. 声明一个函数的指针.

    3. 使用指向函数的指针来调用函数.

    一. 获取地址

    方法: 直接使用函数名, 不跟任何参数. 

    例:

    有一个函数名为think(),  则 think 就是函数的地址., 作为参数传递时, 直接传递函数名就可以, 如:

    process(think)

    二. 声明函数指针

    声明函数的指针时, 和其他声明其他类型的指针一样, 都需要先确定 这个指针是指向哪一类型数据的指针,

    而函数指针特殊的是, 一方面要指定返回类型, 一方面要指定函数的特征标(形式参数列表)

    例如以下一个估算时间的函数, 原型如下:

    double pam(int) ;

    则该函数的对应指针应为:

        double      (*pf)      (int);

        返回值    函数名   参数列表

    仔细观察发现, 函数指针与函数原型的唯一区别就是, 将函数名pam 改为了(*pf)

    即 pam=(*pf)

    pam是一个函数, (*pf) 也就是函数

    (*pf) 是函数, 那么pf就是函数的指针;

    正确声明之后, 就可以进行赋值

    pf = pam;

    如果指针与函数原型不匹配, 无法成功赋值

    成功赋值后, 即可调用

    前面说过, (*pf)=pam

    所以调用时, 直接将(*pf) 看做pam直接进行替换就行

    (*pf)(5)

    实际上, C++ 也允许不加*号, 直接使用指针调用函数

    pf(5)

    但是可读性会较差, 而且容易产生误解.

  • 相关阅读:
    连续型随机变量
    离散型随机变量
    vue1.0生命周期
    vue2.0生命周期函数
    vue2.0 vue.set()
    vue2.0 vue.extend()的拓展
    vue2.0 自定义指令详解
    vue2.0 v-model指令
    vue2.0排序应该注意的问题
    vue2.0版本指令v-if与v-show的区别
  • 原文地址:https://www.cnblogs.com/derek-dhw/p/10447141.html
Copyright © 2011-2022 走看看