jingyyds 2021-08-27 10:12 采纳率: 66.7%
浏览 24

C++指针函数,可不可以讲解下,太绕了


#include<iostream>
const double* f1(const double ar[], int n);
const double* f2(const double[], int);
const double* f3(const double*, int);
int main()
{
    using namespace std;
    double av[3] = { 1112.3,1542.6,2227.9 };
    const double* (*p1)(const double*, int) = f1;
    auto p2 = f2;
    cout << "using pointers to functions:\n";
    cout << "address value\n";
    cout << (*p1)(av, 3) << ":" << *(*p1)(av, 3) << endl;
    cout << p2(av, 3) << ":" << *p2(av, 3) << endl;
    const double* (*pa[3])(const double*, int) = { f1,f2,f3 };
    auto pb = pa;
    cout << "\nusing an array of pointers to functions:\n";
    cout << "address value\n";
    for (int i = 0; i<3; i++)
        cout << pb[i](av, 3) << ":" << *pb[i](av, 3) << endl;
    cout << "\nusing apointer to a pointer to a function:\n";
    cout << "address value\n";
    for (int i = 0; i < 3; i++)
        cout << pb[i](av, 3) << ":" << *pb[i](av, 3) << endl;
    cout << "\nusing pointers to an array of pointers:\n";
    cout << "address value\n";
    auto pc = &pa;
    cout << (*pc)[0](av, 3) << ":" << *(*pc)[0](av,3) << endl;
    const double*(* (*pd)[3])(const double*, int) = &pa;
    const double* pdb = (*pd)[1](av, 3);
    cout << pdb << ":" << *pdb << endl;
    cout << (*(*pd)[2])(av, 3) << ":" << *(*(*pd)[2])(av, 3) << endl;
    return 0;
}
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;
}
  • 写回答

1条回答 默认 最新

  • baidu_30233079 2021-08-27 10:37
    关注

    不要想复杂了,就是一个指针而已。应该说是函数指针,而不是指针函数。
    本质上都是指针,只是指针的类型不一样,比如有int型 ,char型等指针,指向一个函数的指针就是函数指针。
    int *p 整型指针,可以指向一个整型变量的地址。int a; p = &a
    int (*p) (char * str)函数指针,可以指向一个返回整型,且有一个char *参数的函数。 int func(char * str); p = func 。要注意的就是函数指针的返回类型和参数要和指向的函数相同。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月27日

悬赏问题

  • ¥15 第一行输入n,第二行输入a b c输出的字符向后平移n个位置,当移动到z时,重新返回a开始
  • ¥15 为什么跑这个代码,文件显示不在呀
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题