0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用函数指针?

jf_78858299 来源:小余的自习室 作者:小余的自习室 2023-03-30 15:09 次阅读

什么是函数指针

前面一篇文章我们讲解了C/C++中关于指针的用法,但是当时局限的是对变量的指针,对函数这块并未讲解,其实函数也是有地址的。

在程序中定义一个函数,则编译时系统就会为这段代码分配一段存储空间,这段存储空间的首地址称为函数的地址,且函数名代表的就是这个地址。既然是地址就可以使用一个指针变量来存储这个地址,这个指针变量就就叫做函数指针。

函数指针变量定义方式和普通的变量指针定义方式有一定区别:

格式:

函数返回值类型 (* 指针变量名) (函数参数列表);
例如:int (*p)(int,int)

这段代码就定义了一个函数指针变量p,可以用来存储函数的首地址(一般直接使用函数名代替),该函数类型为带两个int形参以及返回值类型为int。

注意:

(*指针变量名)这个括号不能省略,如果写成了int *p(int,int),那就不是一个函数指针了,而是一个返回值类型为一个int型指针的函数p。

那么怎么判断一个指针变量是指向变量的指针变量还是指向函数的指针变量呢?

  • 1.首先看变量名前面有没有“ ”,如果有“ ”说明是指针变量;
  • 2.其次看变量名的后面有没有带有形参类型的圆括号,如果有就是指向函数的指针变量,即函数指针,如果没有就是指向变量的指针变量。

另外也可以使用引用的方式进行定义:

例如:int (*p)(int,int)使用int (&p)(int,int)来定义,读者可以自己去试试。

如何使用函数指针

  • 1.作为指针变量进行赋值调用 代码如下:

    int max(int x, int y) {
        return x >= y ? x : y;
    }
    int min(int x, int y) {
        return x >= y ? y : x;
    }
    
    void extendsTest::mainTest()
    {   
        int a = 10, b = 20;
        int (*p)(int, int);
        p = max;
        cout << p(a, b) << endl;
        p = min;
        cout << p(a, b) << endl;
    };
    运行结果:
    20
    10
    
  • 2.作为参数进行函数回调

    大部分情况下在代码中函数指针是被用来函数回调使用,也就是作为参数传递。

    代码如下:

    int max(int x, int y) {
        return x >= y ? x : y;
    }
    int min(int x, int y) {
        return x >= y ? y : x;
    }
    //指针形式
    void func(int& a,int& b,int (*p)(int,int)) {
        cout << p(a, b) << endl;
    }
    //引用形式
    void func1(int& a, int& b, int (&p)(int, int)) {
        cout << p(a, b) << endl;
    }
    
    void extendsTest::mainTest()
    {   
        int a = 10, b = 20;
        func(a, b, max);
        func(a, b, min);
    };
    
    运行结果:
    20
    10
    

    本例中将函数指针作为另外一个函数的参数传入,在函数内部调用函数指针指向的函数,实现了一个函数内部回调的方式,写Java的同学是不是很熟悉呢?

知识拓展

指针是 C/C++的精华,也是 C/C++的难点,没学会指针就是没学会 C/C++。如果你觉得函数指针还能勉强接受的话,可以尝试理解一些更复杂的指针,例如:

char *(* c[1])(char **p);
char (*(*(*p)(char *))[1])(char *);

以上两个案例如果都能看懂的话,那么99%以上指针都难不倒你了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    117

    文章

    3786

    浏览量

    81024
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62590
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73638
收藏 人收藏

    评论

    相关推荐

    函数指针的使用简述

    函数指针在Linux内核和C语言开发中用的非常多,而且在设计操作系统的时候也会用到,因此这里将详细讲解函数指针。既然函数
    的头像 发表于 09-09 08:56 1983次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>的使用简述

    函数指针与回调函数

    在linux驱动面向对象编程思想中用的最多,利用函数指针来实现封装,下面以一个简单的例子说明。
    的头像 发表于 09-09 08:55 1490次阅读

    函数指针指针函数的概念

    不少朋友会混淆“函数指针”和“指针函数”这两个概念,本文详细介绍一下。
    发表于 03-09 10:49 1211次阅读

    一文详解函数指针与回调函数

    函数指针是指向函数指针变量。它允许我们将函数作为参数传递给其他函数或将
    发表于 08-22 10:36 519次阅读

    函数指针指针函数定义

    函数指针指针函数,C语言学习中最容易混淆的一些概念,好好学习吧
    发表于 01-11 16:44 0次下载

    C语言指针函数函数指针详细介绍

    C语言指针函数函数指针详细介绍。。。。。。。
    发表于 03-04 15:27 5次下载

    c语言函数指针定义,指针函数函数指针的区别

     往往,我们一提到指针函数函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针
    发表于 11-16 15:18 3625次阅读

    理解函数指针函数指针数组、函数指针数组的指针

    理解函数指针函数指针数组、函数指针数组的指针
    的头像 发表于 06-29 15:38 1.5w次阅读
    理解<b class='flag-5'>函数</b><b class='flag-5'>指针</b>、<b class='flag-5'>函数</b><b class='flag-5'>指针</b>数组、<b class='flag-5'>函数</b><b class='flag-5'>指针</b>数组的<b class='flag-5'>指针</b>

    求求你,不要再纠结指针了(2)——函数指针

    如果说指针在一些人心中是导致代码“极其不稳定的奇技淫巧”,那么“函数指针”则是导致代码跑飞和艰涩难懂的罪魁祸首。然而,函数指针的定...
    发表于 01-26 19:51 2次下载
    求求你,不要再纠结<b class='flag-5'>指针</b>了(2)——<b class='flag-5'>函数</b><b class='flag-5'>指针</b>

    指针进阶第五站:函数指针

    定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int
    发表于 08-17 15:58 534次阅读

    C语言进阶:函数指针的概念和使用方法

    函数指针是指向函数指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数
    发表于 05-02 06:17 5890次阅读

    函数类型和函数指针类型的区别

    平时用的更多的是函数指针类型,比如作为函数参数传入回调函数等等。实际上函数类型也是可以作为函数
    发表于 10-24 14:27 394次阅读

    函数指针的基本概念和语法

    函数指针是一种非常强大的编程工具,它可以让我们以更加灵活的方式编写程序。在本文中,我们将介绍 8 个函数指针的高级应用场景,并贴出相应的代码案例和解释。
    的头像 发表于 12-12 09:33 459次阅读

    函数指针指针函数是不是一个东西?

    函数指针的本质是指针,就跟整型指针、字符指针一样,函数指针
    的头像 发表于 01-03 16:35 529次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>和<b class='flag-5'>指针</b><b class='flag-5'>函数</b>是不是一个东西?

    函数指针与回调函数的应用实例

    通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数函数指针
    的头像 发表于 03-07 11:13 400次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>与回调<b class='flag-5'>函数</b>的应用实例