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

  • 相关阅读:
    获取网页源代码
    python下载图片
    vue框架前后端分离项目之登录注册页面及多方式登录、手机号验证码接口等相关内容-121
    django框架前后端混合项目之表设计、数据库及form组件等相关内容-77
    vue框架前后端分离项目之git分支合并及首页登陆注册接口等相关内容-120
    vue框架前后端分离项目之git的使用等相关内容-119
    vue框架前后端分离项目之xadmin、轮播图接口及git的介绍等相关内容-118
    vue框架前后端分离项目之跨域问题及首页搭建等相关内容-117
    vue框架前后端分离项目之框架介绍及前后端配置等相关内容-116
    django框架之自定义中间件及csrf跨站请求伪造等相关内容-75
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/7231668.html
Copyright © 2011-2022 走看看