• 函数指针高级使用


    /**********************************************************************
    * 版权所有 (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

  • 相关阅读:
    你是否听说过 HashMap 在多线程环境下操作可能会导致程序死循环?
    深入浅出分析 PriorityQueue
    深入浅出分析 ArrayDeque
    深入浅出的分析 Set集合
    深入浅出的分析 Properties
    深入浅出分析 HashMap
    深入浅出的分析 Hashtable
    深入浅出的分析 WeakHashMap
    深入浅出的分析IdentityHashMap
    python 执行js PyExecJS
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/7231668.html
Copyright © 2020-2023  润新知