zoukankan      html  css  js  c++  java
  • C++函数指针

    一、基本语法

    现有一函数如下

    void foo(int a, int b)
    {
        cout << a + b << endl;
    }

    1、直接定义函数指针

    1      void (*pf)(int, int);   // 定义函数指针变量pf
    2      pf = foo;               // 赋值使其指向函数foo --- (1)
    3      pf = &foo;              // 赋值使其指向函数foo --- (2)
    4                              // (1)与(2)均ok
    5  
    6      pf(6, 7);               // 通过函数指针调用函数:输出13 --- (3)
    7      (*pf)(6, 7);            // 通过函数指针调用函数:输出13 --- (4)
    8                              // (3)与(4)均ok

    2、利用类型别名定义

    typedef void (*FunPtr)(int, int);  // 定义函数指针类型别名
    1      FunPtr pf;              // 定义函数指针变量pf
    2      pf = foo;               // 赋值使其指向函数foo --- (1)
    3      pf = &foo;              // 赋值使其指向函数foo --- (2)
    4                              // (1)与(2)均ok
    5  
    6      pf(6, 7);               // 通过函数指针调用函数:输出13 --- (3)
    7      (*pf)(6, 7);            // 通过函数指针调用函数:输出13 --- (4)
    8                              // (3)与(4)均ok

    二、const 函数指针

    C++不支持const函数指针,我们只能定义非const函数指针变量。

    以下是我在VS2010中试图定义const函数指针变量时报的错:

    1      void (const *pf)(int, int);       // error C2143: syntax error : missing ')' before 'const'
    2                                        // error C2059: syntax error : ')'

    当我试图利用typedef定义const函数指针类型时,报错如下:

    typedef void (const *FunPtr)(int, int);     // error C2059: syntax error : '<cv-qualifer>'

    具体可参考如下文章:

    http://stackoverflow.com/questions/1117873/pointer-to-const-vs-usual-pointer-for-functions

     

     

  • 相关阅读:
    (五)L-BFGS算法
    (四)BFGS
    (三)DFP算法
    (二)拟牛顿条件
    (一)牛顿法与阻尼牛顿法
    遗传算法求解最优值
    Anaconda(Python3.6)配置OpenCV3.3
    SVM基础知识
    IO流
    webserver服务器优化0.1
  • 原文地址:https://www.cnblogs.com/Hisin/p/2455827.html
Copyright © 2011-2022 走看看