函数指针数组的定义形式和取值执行_函数指针数组的定义形式和取值执行方式

函数指针数组的定义形式和取值执行_函数指针数组的定义形式和取值执行方式【C语言】指针的高级用法(指针数组,函数指针,函数指针数组,回调函数)前言当你学了指针的基本用法,那不妨看看指针的高级用法。在本片博客中,作者将会带领你学习和理解并且使用指针的高级用法。一.指针数组数组大家都知道,数组是用来存储一组相同类型

【C语言】指针的高级用法(指针数组,函数指针,函数指针数组,回调函数)
  前言

  当你学了指针的基本用法,那不妨看看指针的高级用法。在本片博客中,作者将会带领你学习和理解并且使用指针的高级用法。

  一.指针数组

  数组大家都知道,数组是用来存储一组相同类型数据的集合,例如有:整形数组,字符型数组、双精度度浮点型数组。那么指针数组是什么呢,指针数组就是一组存放指针类型的集合。如下图所示。

  函数指针数组的定义形式和取值执行_函数指针数组的定义形式和取值执行方式

  指针数组的每一个元素都是一个地址,每个元素都可以指向一块区域。

  那么数组指针有什么用呢?下面会介绍到

  二.函数指针

  函数指针是一个存放函数地址的指针,也就是说,函数指针是一个指针指向一个函数的地址。我们知道每一个变量都会有自己的地址,其实函数也会有自己的地址,这时我们可以用一个指针来存放函数的地址。

  函数指针数组的定义形式和取值执行_函数指针数组的定义形式和取值执行方式

  从代码中,我可以看到,其实函数也是有自己的地址的,同时无论是Add还是&Add,输出的是相同的结果,也就是说函数名就是函数的地址。

  那么当我们定义了一个函数的时候,如何将这个函数的地址存放到一个指针变量里面?

  答案是使用函数指针。

  函数指针数组的定义形式和取值执行_函数指针数组的定义形式和取值执行方式

  函数指针用法如上, 各个位置的意义如下。

  函数指针数组的定义形式和取值执行_函数指针数组的定义形式和取值执行方式
1.函数指针的使用。

  2.typedef函数指针的使用

  在我们使用函数指针的使用需要很长的定义,这个时候我们可以使用typedef关键字来缩短代码长度。

  函数指针数组的定义形式和取值执行_函数指针数组的定义形式和取值执行方式

  也就是说,使用typedef重定义后,int (*pAdd)(int,int)等同于p_fun pAdd。

  三.函数指针数组

  前面我们知道,函数指针是一个存放函数地址的指针变量,那么函数指针数组就是一个数组,里面存的都是函数指针。那么函数指针数组有什么用呢?函数指针数组可以用来实现转移表。 

1.函数指针数组的定义

  那么函数指针数组如何定义呢?如下所示。

  函数指针数组的定义形式和取值执行_函数指针数组的定义形式和取值执行方式  
2.计算器的一般实现

  函数指针数组的用途。

  通过这种实现的方法,代码非常臃肿,有许多相似或者是重复的地方。使用转移表来实现,可以大大的简化代码。 

 3.计算器的转移表实现

  通过观察可以发现,每一个功能函数的返回值和参数类型都是一样的,也就是说它们的函数指针类型也是一样的,那么我们可以通过创建一个函数指针数组来存放这四个功能函数的地址,需要调用那个函数的时候,只需要调用对应的数组位置即可。

  四. 回调函数

  什么叫回调函数,回调函数就是通过函数指针调用的函数。

  通俗的讲就是,将一个函数A的地址作为函数B的参数传递给函数B中,在使用这个函数B,会在该函数B内部,通过使用函数指针的方式来调用函数A。

  回调函数的使用举例:在C语言标准库中,有一个用于快速排序的库函数,这个库函数就有用到回调函数,下面来举例。

  void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*));

  这个qsort库函数的函数参数有四个,分别是:需要排序的数组,该数组的总字节大小,每个元素的大小,以及一个compare比较函数,其中这个compare比较函数需要自己设计。原因:qsort这个库函数不知道你需要排序的数据类型,有可能是int,char,甚至有可能是一个结构体数组,因为这个原因,所以我们需要自己设计一个compare比较函数来帮助qsort完成排序,其中compare函数就是你需要排什么类型数据来设计。

  注意!!!     函数名就是函数的地址。 

1.使用冒泡排序算法来模拟实现qosrt函数

激活谷谷主为您准备了激活教程,为节约您的时间请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/92364.html

(0)
上一篇 2024年 5月 30日 下午12:42
下一篇 2024年 5月 30日

相关推荐

  • ejb3.0入门经典

    ejb3.0入门经典开篇直奔主题,java 学习个人感觉分为两种途径,第一种是在学校,在培训机构等地方学习.有人指导;第二种是自学,通过视频,书籍,朋友等完成学习. 本文适合 自学,且基础薄弱或者无基础的人.先介绍下我的个人简历:高中毕业,无编程语言基础,英语水平可能不到初中水平吧.自学 6 个多月,目前已工作.ja

    激活谷笔记 2024年 5月 19日
  • 计算机组成原理第四版第二章课后题答案_计算机组成原理第四版第二章课后题答案解析

    计算机组成原理第四版第二章课后题答案_计算机组成原理第四版第二章课后题答案解析3-4-2 定点数的除法运算 —— 原码除法运算 —— 不恢复余数法(无字幕版)0 课程介绍05:361-1 计算机系统的组成(无字幕版)02:591-2 计算机的发展(无字幕版)14:241-3 计算机

    2024年 5月 31日
  • 哈夫曼编码c语言代码_哈夫曼编码c语言代码桟

    哈夫曼编码c语言代码_哈夫曼编码c语言代码桟自学考试:数据结构导论课件.pdf第一章概论第零节概论简单地说,数据结构是计算机组织数据和存储数据的方式。更进一步地说,数据结构是指一组相互之间存在一种或多种特定关系的数据的组织方式和它们在计算机内的存储方式,以及定义在该组数据上的

    激活谷笔记 2024年 5月 29日
  • win10怎么样重装系统_win10重装系统的备份

    win10怎么样重装系统_win10重装系统的备份win10怎么重装系统不丢失数据,win10重装系统并保留之前文件选择重装系统,因为担心系统安装之后丢失掉数据。win10怎么重装系统不丢失数据?这篇文章介绍了3种有效的方法,并帮助您了解哪种情况选择哪种工具。一、什么情况下会重装系统?在正常的使用期内,电脑也会越用越慢,或者发生其他故障,除

    2024年 5月 15日
  • 权重优化调度是什么意思

    权重优化调度是什么意思网站权重优化指的是通过一系列的技术手段和优化策略,提升网站在搜索引擎中的权威性和排名,从而增加流量和影响力。在竞争激烈的网络时代,拥有一个高权重的网站对于提升企业形象、扩大市场份额至关重要。本文将从内容优化、外

    激活谷笔记 2024年 5月 17日
  • 键盘钩子函数掉线了怎么办啊怎么解决

    键盘钩子函数掉线了怎么办啊怎么解决程序员尤其 Windows 程序员会经常说“下个钩子”,小编还是一名学生的时候,对说出这个短语的人真是崇拜至极。这么多年过去了,小编还会不经意间蹦出这几个字,即使已经了解这是一名程序员的基本功,说起来依然觉得有范儿。钩子来源于英文词hook。在Windows系统中一切皆消息,按键盘上

    激活谷笔记 2024年 5月 20日
  • 武汉法国递签中心在哪里办公_武汉法国递签中心在哪里办公的

    武汉法国递签中心在哪里办公_武汉法国递签中心在哪里办公的’ + headerTitle + ”);}document.writeln(” + doctitle + ”);document.writeln(” + subTitle + ”);来源:长江日报发布日期:2024-01-09 20:23var fileNum = “”i

    2024年 5月 30日
  • html 控件 代码_html5 控件

    html 控件 代码_html5 控件HTML5入门5-HTML5控件元素<!DOCTYPE html><html> <head> <meta charset=”utf-8″> <title>第三个页面</t

    激活谷笔记 2024年 5月 21日
  • 电脑cpu性能测试软件有哪些好用_电脑cpu性能测试软件有哪些好用的

    电脑cpu性能测试软件有哪些好用_电脑cpu性能测试软件有哪些好用的医院的业务系统应该怎么用超融合来支撑?Q、医院决定使用超融合架构之前,需要做哪些准备工作?医院在向超融合架构转型前,需要对业务系统进行梳理,并对超融合的技术路线做相关选型。医院业务系统需求梳理分析、梳理医院现有业务系统,评估哪些业务系

    2024年 5月 27日
  • redis数据库特点_redis的五种数据类型及应用场景

    redis数据库特点_redis的五种数据类型及应用场景Redis的五种数据类型及其应用场景这里我们做的很简单。在Redis中我们的最新ID使用了常驻缓存,这是一直更新的。但是我们做了限制不能超过5000个ID,因此我们的ID函数会一直询问Redis。只有在start/count参数超出了这个范围的时候,才需

    激活谷笔记 2024年 5月 14日
  • ubuntu系统黑屏怎么解决_双系统安装完ubuntu重启黑屏

    ubuntu系统黑屏怎么解决_双系统安装完ubuntu重启黑屏ubuntu 20.04安装后遇到的问题及解决办法记录(时间不一致、黑屏、点软件图标卡死)前言实验室新购了一批电脑,安装了ubuntu20.04与windows11双系统。在我使用的时候发现了一些问题。windows时

    2024年 5月 17日
  • pycharm怎么读取excel数据_python处理excel数据

    pycharm怎么读取excel数据_python处理excel数据利用Python对Excel数据进行处理通过本文,记录分享我利用Python对已存在的excel表格进行数据处理。 因为是没学可视化之前做的,所以都展示在后台上。 1. 功能分析 1.1加载文件夹内所有的Excel数据; 1

    2024年 5月 17日
关注微信