C/C++ 函数指针(指向函数的指针)高级篇

代码

头文件:

//
// Created by hsj on 2022/1/6.
//

#ifndef CLION_CPP_T_POINTER_TO_FUNC_H
#define CLION_CPP_T_POINTER_TO_FUNC_H
//函数指针(指向函数的指针测试)高级篇
void test_pointer_to_func();
//一些函数原型
const double * f1(const double arr[],int n);
const double * f2(const double [],int n);
const double * f3(const double *,int n);
#endif //CLION_CPP_T_POINTER_TO_FUNC_H

cpp文件:

//
// Created by hsj on 2022/1/6.
//
#include <iostream>
#include "t_pointer_to_func.h"

//函数指针(指向函数的指针测试)高级篇
void test_pointer_to_func(){

    using namespace std;
    double av[3]{1112.3,1542.6,2227.9};

    //简单的函数指针
    const double * (*p1)(const double arr[],int n) = f1;
    auto p2 = f2;
    cout<<"return addr:"<<(*p1)(av,3)<<"return addr to value:"<<*(*p1)(av,3)<<endl;//风格1
    cout<<"return addr:"<<p2(av,3)<<"return addr to value:"<<*p2(av,3)<<endl;//风格2

    //arrays of pointer(指针数组:数组里面全是指针)
    const double * (*pa[3])(const double arr[],int n) = {f1,f2,f3};
    for (int i = 0; i < 3; ++i) {
        cout<<"[arrays of pointer]return addr:"<<(*pa[i])(av,3)<<"[arrays of pointer]return addr to value:"<<*(*pa[i])(av,3)<<endl;//风格1
        cout<<"[arrays of pointer]return addr:"<<pa[i](av,3)<<"[arrays of pointer]return addr to value:"<<*pa[i](av,3)<<endl;//风格2
    }

    //二级指针(指向指针的指针)
    const double * (**pb)(const double arr[],int n) = pa;
    for (int i = 0; i < 3; ++i) {
        cout<<"[arrays of pointer 2 level]return addr:"<<(*pb[i])(av,3)<<"[arrays of pointer 2 level]return addr to value:"<<*(*pb[i])(av,3)<<endl;//风格1
        cout<<"[arrays of pointer 2 level]return addr:"<<pb[i](av,3)<<"[arrays of pointer 2 level]return addr to value:"<<*pb[i](av,3)<<endl;//风格2
    }

    //指向整个指针数组的指针
    const double * (*(*pc)[3])(const double arr[],int n) = &pa;
    for (int i = 0; i < 3; ++i) {
        cout<<"[arrays of pointer ,pointer arrays of pointer's pointer]return addr:"<<(*(*pc)[i])(av,3)<<"[arrays of pointer ,pointer arrays of pointer's pointer]return addr to value:"<<*(*(*pc)[i])(av,3)<<endl;//风格1
        cout<<"[arrays of pointer ,pointer arrays of pointer's pointer]return addr:"<<((*pc)[i])(av,3)<<"[arrays of pointer ,pointer arrays of pointer's pointer]return addr to value:"<<*((*pc)[i])(av,3)<<endl;//风格2
    }

}
const double * f1(const double arr[],int n){
    return arr;
}
const double * f2(const double arr[],int n){
    return arr + 1;
}
const double * f3(const double *arr,int n){
    return arr + 2;
}

输出:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值