返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言指向函数的指针实例分析
  • 938
分享到

C语言指向函数的指针实例分析

2023-07-02 17:07:42 938人浏览 安东尼
摘要

这篇文章主要介绍“C语言指向函数的指针实例分析”,在日常操作中,相信很多人在C语言指向函数的指针实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指向函数的指针实例分析”的疑惑有所帮助!接下来,请跟

这篇文章主要介绍“C语言指向函数的指针实例分析”,在日常操作中,相信很多人在C语言指向函数的指针实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指向函数的指针实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、函数的指针

首先,函数名代表函数的起始地址,调用函数时,程序会从函数名获取到函数起始地址,并从该地址起执行函数中的代码,函数名就是函数的指针,所以我们可以定义一个指向函数的指针变量,用来存放函数的起始地址,这样一来,就可以通过该变量来调用其所指向的函数。

二、指向函数的指针变量

定义指向函数的指针变量

返回值类型(* 指针变量名)(形参类型列表);

例如:int(*p)(int, int);,这行代码定义了一个可以指向返回值为整型且有两个整型形参函数的指针变量p,符合返回值为整型且有两个整型形参的函数都可以将其地址(即其函数名)赋给p。

使用指向函数的指针变量

在使用指向函数的指针变量时,只需要将函数名赋给指向函数的指针变量即可,因为函数名就是该函数的入口地址。

由于指向函数的指针变量保存了函数的地址,则该指针变量就指向了对应的函数。例如,求最大值的函数命名为max,如果将其函数名赋给指向函数的指针变量p(即p = max)后,则p就指向了max函数,并且可以通过(*p)(a, b);的方式来调用max函数,因为指针变量p保存了max函数的地址,那么*p就是max。需要注意的是,其中*p前的*可以省略,故也可以写成p(a, b);

三、调用函数的两种方式

引例:自定义max函数,求整数ab中的较大者并返回给主调函数,不考虑两数相等的情况通过函数名调用函数

#include <stdio.h>int max(int, int); // max函数的函数声明int main(){int a, b;printf("请输入两个整数:");scanf("%d%d", &a, &b);printf("两数中的较大者的值为%d\n", max(a, b));return 0;}int max(int a, int b){if (a > b)return a;elsereturn b;}

通过指向函数的指针变量调用函数

#include <stdio.h>int max(int, int); // max函数的函数声明int main(){int a, b;int(*p)(int, int); // 定义指向函数的指针pp = max; // p指向max函数printf("请输入两个整数:");scanf("%d%d", &a, &b);printf("两数中的较大者的值为%d\n", (*p)(a, b)); // (*p)(a, b) 也可写为 p(a, b)return 0;}int max(int a, int b){if (a > b)return a;elsereturn b;}

四、指向函数的指针的作用

看到这里有人可能会问,既然函数名就可以调用函数,为什么还要弄个奇奇怪怪的指针?这难道不是多此一举嘛?难倒是为了装13?不管怎样,使用指向函数的指针来调用函数肯定不是为了装13,主要的原因是:用函数名调用函数时比较死板,只能调用所指定的一个函数,而通过指针变量调用函数会比较灵活,可以根据不同的情况调用不同的函数。以下面的程序为例: 输入两个整数,然后让用户选择1或2,选1则调用max函数求出两个整数的较大者并将其输出,选2则调用min函数求出两个整数的较小者并将其输出,不考虑两数相等的情况

#include <stdio.h>int max(int, int); // max函数的函数声明int min(int, int); // min函数的函数声明int main(){int a, b, c, n;int (*p)(int, int); // 定义指向函数的指针pp = NULL; // 先将p赋为空printf("请输入两个整数:");scanf("%d%d", &a, &b);printf("输入1获取两个数中的较大者,输入2获取两个数中的较小者,请输入:");scanf("%d", &n);if (n == 1)p = max; // p指向max函数else if (n == 2)p = min; // p指向min函数c = p(a, b); // 调用p所指向的函数if (n == 1)printf("两个数中的较大者为:%d\n", c);elseprintf("两个数中的较小者为:%d\n", c);return 0;}int max(int a, int b){if (a > b)return a;elsereturn b;}int min(int a, int b){if (a < b)return a;elsereturn b;}

五、用指向函数的指针作函数参数(重点)

指向函数的指针变量的一个重要用途是把函数的入口地址作为实参传递给其他函数。以下面的程序为例:

有两个整数ab,由用户输入1,2,3来决定进行什么操作。输入1则求出ab中的较大者,输入2则求出ab中的较小者,输入3则求出ab之和,不考虑两个数相等的情况

#include <stdio.h>int fun(int, int, int (*p)(int, int));int max(int, int);int min(int, int);int sum(int, int);int main(){int a = 34, b = -21, n;printf("输入1获得两数中的较大者,输入2获得两数中的较小者,输入3获得两个数的和,请输入:");scanf("%d", &n);if (n == 1)printf("两数中的较大者为%d\n", fun(a, b, max)); // 向fun函数中传参时,只需要传入两个整数或整型变量以及想要在fun函数内执行的函数的函数名即可// 函数名会传递给对应的形参指针变量else if (n == 2)printf("两数中的较小者为%d\n", fun(a, b, min));else if (n == 3)printf("两个数的和为%d\n", fun(a, b, sum));return 0;}// fun函数的作用是获取最终结果int fun(int x, int y, int (*p)(int, int)){int result;result = p(x, y); // 用result接收最终结果,不管执行max,min,sum中的哪个函数,fun函数内部代码都不用改变return result;}int max(int x, int y){if (x > y)return x;elsereturn y;}int min(int x, int y){if (x < y)return x;elsereturn y;}int sum(int x, int y){return x + y;}

从上面的程序中可以清晰地看出,不管调用maxminsum中的哪个函数,fun函数均没有任何变化,在fun函数内部的result只用来获取结果并将结果返回,但不去判断到底要通过哪个函数来计算这一结果,主调函数向其传入哪个函数,其内部就执行哪个函数。maxminsum函数用来计算,fun函数用来获取结果,这体现出了整个程序的模块化。

六、为什么要将指向函数的指针变量作为函数的形参(重点)

举一个例子,我们在学习数组的过程中,想要把数组中的所有元素输出,通常会接触一个新词,遍历。其实遍历的含义并不是将一个结构中的元素输出的过程,然而我在初学时便认为遍历等同于输出,这是我在初学时对遍历这个词不准确的理解,我相信也一定有人跟我一样这样认为。其实遍历指的是依次访问某种结构中的所有元素,至于对这些元素怎么操作,由程序员自己决定,比如,你想输出所有的元素,那就可以调用输出函数将每次获取到的元素输出;你想将所有元素的值翻倍,那就调用对应的翻倍函数将每次获取到的元素翻倍。但是这样一来,遍历函数的功能就变得十分单一,只能进行一种操作,要么是遍历并输出,要么是遍历并翻倍,如果在一个程序中,开始想要遍历并翻倍,后又想要遍历并输出,就只能定义两个函数来实现,但是我们发现不管对元素怎么操作,访问每个元素的代码都是相同,并且只要想对结构中的每个元素进行操作,首先要做的就是访问每个元素。但是如果为了输出而定义一个先遍历后输出的函数,为了将每个元素的值翻倍而定义一个先遍历后翻倍的函数,这样遍历元素的代码就是重复的。那要怎么办呢?既然遍历的操作是重复的,那我们就定义一个专门的遍历函数,该函数只用来访问元素,再定义其它多个操作数据的函数,至于我们对遍历后的数据执行什么样的操作,我们只需要将对应的操作函数通过遍历函数的形参接收过来,这样就可以实现在遍历函数中根据不同情况执行不同操作的目的,如此一来既体现出了程序设计的结构化与模块化,又减少了编程时的代码量。

到此,关于“C语言指向函数的指针实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C语言指向函数的指针实例分析

本文链接: https://lsjlt.com/news/343533.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言指向函数的指针实例分析
    这篇文章主要介绍“C语言指向函数的指针实例分析”,在日常操作中,相信很多人在C语言指向函数的指针实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指向函数的指针实例分析”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
  • C语言中二级指针解析(指向指针的指针)
    目录二级指针(指向指针的指针)二级指针的定义与理解二级指针定义格式二级指针赋值实例二级指针(指向指针的指针) 指针可以指向一份普通类型的数据,例如 int、double、char 等...
    99+
    2024-04-02
  • C语言指针应用实例分析
    这篇文章主要讲解了“C语言指针应用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言指针应用实例分析”吧!1、指针是什么指针理解的2个要点:平时口语中说的指针,通常指的是指针变量,...
    99+
    2023-06-30
  • C语言指针运算实例分析
    这篇文章主要介绍“C语言指针运算实例分析”,在日常操作中,相信很多人在C语言指针运算实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指针运算实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-30
  • C语言指针使用实例分析
    今天小编给大家分享一下C语言指针使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。何为指针指针这玩意说白了,就是用来...
    99+
    2023-07-02
  • C语言中返回值指针函数的示例分析
    这篇文章主要为大家展示了“C语言中返回值指针函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中返回值指针函数的示例分析”这篇文章吧。   #inc...
    99+
    2023-06-29
  • C语言指针和数组应用实例分析
    这篇文章主要介绍“C语言指针和数组应用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言指针和数组应用实例分析”文章能帮助大家解决问题。一、指针和数组分析-上1.数组的本质数组是一段连续的...
    99+
    2023-06-30
  • C语言超详细讲解指向函数的指针
    目录一、函数的指针二、指向函数的指针变量三、调用函数的两种方式四、指向函数的指针的作用五、用指向函数的指针作函数参数(重点)六、为什么要将指向函数的指针变量作为函数的形参(重点)一、...
    99+
    2024-04-02
  • C语言深入浅出分析函数指针
    我们先看一个代码: #include<stdio.h> void test() { printf("haha\n"); } int main() { printf("...
    99+
    2024-04-02
  • C语言基础野指针与空指针示例分析
    目录一:野指针野指针的成因1. 指针未初始化2. 指针越界访问3 .指针释放后未置空规避野指针1. 初始化指针 2. 避免指针越界 3 避免返回局部变量的地址 4. 开辟的指针释放后...
    99+
    2024-04-02
  • C语言的数组指针与函数指针详解
    目录前言函数指针语法数组指针与指针数组总结前言 数组指针和函数指针都是C语言比较难的知识点,尤其是函数指针,并且函数指针在开发中有着巨大的作用。 函数指针语法 定义一个函数指针,并通...
    99+
    2024-04-02
  • C++中返回指向函数的指针示例
    在C++中,函数的形参可以是指向函数的指针,函数也可以返回函数的指针。例如:int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形...
    99+
    2022-11-15
    指向函数的指针 C++
  • C语言结构体指针的示例分析
    这篇文章给大家分享的是有关C语言结构体指针的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。写结构体指针前,先说一下 . 号和 -> 的区别记得当初刚学C语言的...
    99+
    2023-06-20
  • c语言怎么向函数传递数组指针
    在C语言中,可以通过指针的方式向函数传递数组指针。以下是一个示例代码: #include void printArray(int...
    99+
    2023-10-25
    c语言
  • C语言深入分析数组指针和指针数组的应用
    目录一、数组类型二、定义数据类型三、数组指针四、指针数组五、小结一、数组类型 C语言中的数组有自己特定的类型数组的类型由元素类型和数组大小共同决定 例:int array[5] 的类...
    99+
    2024-04-02
  • C++中指针实例分析
    这篇文章主要介绍“C++中指针实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++中指针实例分析”文章能帮助大家解决问题。计算机的内存模型CPU是计算机的核心部件,要想让一个CPU工作,就必...
    99+
    2023-06-19
  • C语言函数指针详解
    目录Introduction函数指针 Function PointersExercise 1:qsort中的函数指针Exercise 2:总结Introduction 上一个lab的...
    99+
    2024-04-02
  • C++的this指针实例分析
    这篇文章主要介绍了C++的this指针实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的this指针实例分析文章都会有所收获,下面我们一起来看看吧。this指针是存在与类的成员函数中,指向被调用函数...
    99+
    2023-06-27
  • C语言中怎么使用指针函数和函数指针
    本篇内容介绍了“C语言中怎么使用指针函数和函数指针”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、指针函数当一个函数声明其返回值为一个指针...
    99+
    2023-06-16
  • C语言中如何使用指针函数和函数指针
    这篇文章给大家介绍C语言中如何使用指针函数和函数指针,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、指针函数当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。格式:...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作