zoukankan      html  css  js  c++  java
  • 函数指针高级使用

    /**********************************************************************
    * 版权所有 (C)2017, Wang maochun。
    *
    * 文件名称:arfupt.c
    * 文件标识:无
    * 内容摘要:该程序参考C++primer plus,主要熟悉函数指针的使用 
    * 其它说明:[] ()的优先级比*高 
    * 当前版本:V1.0
    * 作    者:Wang maochun
    * 完成日期:2017.7.24
    *
    **********************************************************************/
    
    #include <iostream>
    //various notations ,same signature
    
    const double *f1(const double *ar,int n);
    const double *f2(const double ar[],int n);
    const double *f3(const double ar[],int n);
    
    
    int main()
    {
        using namespace std;
        double av[3] = {1112.3,1542.6,2227.9};
        
        //pointer to a function
        const double *(*p1)(const double *,int) = f1;
        auto p2 = f2; //C++11 automatic type deduction
        //pre-C++ can use the following code instead
        //const double *(*p2) (const double *,int) =f2;
        cout << "Using pointers to functions:
    ";
        cout << "Adress Value
    ";
        cout << (*p1)(av,3) << ":" << *(*p1)(av,3) <<endl;
        cout << p2(av,3) << ":" << *p2(av,3) <<endl;
        
        //pa an array of pointers
        //auto doesn't work with list initialization
        const double *(*pa[3])(const double *,int) = {f1,f2,f3};
        //but it does work for initializing to a single value
        //pb a pointer to first element of pa
        auto pb = pa;
        //pre C++11 can use the following code instead
        //const double *(**pb)(const double *,int) = pa;
        cout <<"
    Using an array of pointers to function:
    ";
        cout << "Address Value
    ";
        for (int i = 0; i<3;i++)
            cout << pa[i](av,3) <<":" << *pa[i](av,3)<<endl;
        cout <<"
    Using a pointer to a pointer to a function:
    ";
        cout << "Adress Value
    ";
        for (int i = 0; i<3;i++)
            cout << pb[i](av,3) <<":" << *pb[i](av,3)<<endl;
        
        
        //what about a pointer to an array of function pointers
        cout << "
    Using pointers to an array of pointers:
    ";
        cout << "Adress Value
    ";
        //easy pc =&pa;
        auto pc = &pa;
        //pre-C++ can use the following code instead
        //const doubel *(*(*pc)[3])(const double *,int) = &pa;
        cout << (*pc)[0](av,3) << ":" <<*(*pc)[0](av,3) <<endl;
        //hard way to declare pd
        const double *(*(*pd)[3])(const double *,int ) =&pa;
        //store return value in pdb
        const double * pdb = (*pd)[1](av,3);
        cout << pdb <<":"<< *pdb <<endl;
        //alternative notation
        cout << (*(*pd)[2])(av,3) <<":"<< *(*(*pd)[2])(av,3)<<endl;
        
        //cin.get();
        return 0;
        
    } 
    
    //some rather dull functions
    const double *f1(const double *ar,int n)
    {
        return ar;
    }
    
    const double *f2(const double ar[],int n)
    {
        return ar+1;
    }
    
    const double *f3(const double ar[],int n)
    {
        return ar+2;
    }

    运行结果:

    小技巧:如何定义该函数指针变量? 将函数声明中的函数名通过*p替代

                  [] ()优先级比*高

        该程序每隔几天多读读,简直是指针与函数结合最难的。

    Dev C++ 支持C++11 :先在dev的【工具】里找到【编译选项】,在这个【编译时加入以下命令】处打钩,然后在空白栏输入【-std=c++11】,确定.然后就能支持c++11

  • 相关阅读:
    BZOJ 3744 Gty的妹子序列
    BZOJ 3872 Ant colony
    BZOJ 1087 互不侵犯
    BZOJ 1070 修车
    BZOJ 2654 tree
    BZOJ 3243 向量内积
    1003 NOIP 模拟赛Day2 城市建设
    CF865D Buy Low Sell High
    CF444A DZY Loves Physics
    Luogu 4310 绝世好题
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/7231668.html
Copyright © 2011-2022 走看看