指针深度应用、解析及辨析(附代码)

简介: 指针深度应用、解析及辨析(附代码)

1.指针数组


顾名思义是一个数组但是里面储存的元素是指针。

如 int* arr[5] 就是存放5个数据类型是 int* 的数组,不仅如此内部存储的还可以是字符指针或是二级指针。

2.数组指针


即为指向数组的指针。

数组指针的定义


那关于该类型数据的写法便有两种  

image.png

仔细对比,我们会发现第一种写法就是我们上面说过的指针数组

image.png

那为什么,只有第二种写法那样才能算是数组指针呢?通过查询操作符属性表,可以知道 [ ] 的优先级是高于 * 的。所以 p1 会与 [ ] 先结合形成数组,若先用( )让p2与 * 先结合这样便是我们想要的数组指针了。

696ca45820b64dd5a20ed860c3e7ac90.png

数组指针的使用


数组指针在使用的时候只需要将指针解引用访问后加上数组的下标。

image.png

或是通过对地址的处理得到我们预想的结果。

image.png

3.函数指针


从这个程序的运行结果我们可以知道函数名在调用时便是这个函数的地址。

image.png

函数指针的定义


因此也可以用指针指向这个函数。在写指针的数据类型时同样也是需要保留指向内容所带有的性质。用括号保证 * 先与 p 结合再在后面加上函数引用参数的数据类型。

image.png

函数指针的使用


需要再指针解引用之后用()传入要引用的参数,根据操作符的先后原则,要再使用一个括号,抢先使 * 与指针名结合。

4.函数指针数组


当我们需要在一个循环中使用不同的函数时,使用函数指针数组就可以简便这个过程。

3989ddba615c4bf3bd21d51c639e7692.png

函数指针数组的定义


定义函数指针时,像定义数组函数那样将其定义(主体是数组),第一个int表示函数返回的数据类型,因为是数组所以不需要用括号使 * 与数组名先集合,后面括号中的是函数参数的数据类型。

函数指针数组的使用


在使用时需要在数组后面加上下标来确定函数。因为 [ ] 的的优先级低于()所以要用括号将其限定。这样随着i的变化就可以使用不同的函数。

5.指向函数指针数组的指针


既然有了函数指针数组自然有指向函数指针数组的指针。

525a34b35ff84b80a10198a98a029daa.gif

image.png

指向函数指针数组的指针的定义


当我们将 arr 的名称去掉之后,剩下的就是其数据类型因此我们可以知道 arr 的数据类型为:


int(* [2])(int, int),要想得到指向函数指针数组的指针的数据类型,首先我们确定该主体为指针所以不能让 [ ] 与指针的名字先结合,同时第一个 * 标志着数组里面存放的 int*(int , int) 数据类型的指针。因此我们需要再加上一个 * 与数据名先结合,便写作 int(*(*p)[2])(int, int) 。

指向函数指针数组的指针的使用


根据需要选择数组的下标,并进行传参,需要注意的仍然是操作符的优先顺序,确保传参的优先级最小,数组次之,指针为最优先。

6.题目辨析


image.png

我们来看这串代码,首先定义了一个结构体指针(大小为20字节);第一个打印的是 p 直接加上一个 1 ,p为结构型指针所以加上 1 时地址会加上一个结构体指针类型大小,而当 p 被强制类型转换成 long 由于long为整型所以,整型之间的加减便是直接相加,即加一。当被转化成 int* 的时候就是加上一个 int* 类型的大小。便是如下结果。

image.png

再来看看这道题

image.png

定义一个存放 char* 数据的数组因为是 char* 而数组初始化里面是三个字符串,因此数组里面存放的是三个字符串的首字符的地址。

image.png

pa 是一个二级指针存放数组 a 的地址虽然定义得不够稳妥但是还是可以使用,pa++ 后便由原来指向 w 转为指向 a 了。随后打印字符串,即到 \0 截止。所以最后打印的结果便是 at

目录
相关文章
|
6月前
|
机器学习/深度学习 文字识别 监控
安全监控系统:技术架构与应用解析
该系统采用模块化设计,集成了行为识别、视频监控、人脸识别、危险区域检测、异常事件检测、日志追溯及消息推送等功能,并可选配OCR识别模块。基于深度学习与开源技术栈(如TensorFlow、OpenCV),系统具备高精度、低延迟特点,支持实时分析儿童行为、监测危险区域、识别异常事件,并将结果推送给教师或家长。同时兼容主流硬件,支持本地化推理与分布式处理,确保可靠性与扩展性,为幼儿园安全管理提供全面解决方案。
257 3
|
7月前
|
人工智能 API 开发者
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
332 27
|
7月前
|
供应链 项目管理 容器
深入探索 BPMN、CMMN 和 DMN:从定义到应用的全方位解析
在当今快速变化的商业环境中,对象管理组织(OMG)推出了三种强大的建模标准:BPMN(业务流程模型和符号)、CMMN(案例管理模型和符号)和DMN(决策模型和符号)。它们分别适用于结构化流程管理、动态案例处理和规则驱动的决策制定,并能相互协作,覆盖更广泛的业务场景。BPMN通过直观符号绘制固定流程;CMMN灵活管理不确定的案例;DMN以表格形式定义清晰的决策规则。三者结合可优化企业效率与灵活性。 [阅读更多](https://example.com/blog)
深入探索 BPMN、CMMN 和 DMN:从定义到应用的全方位解析
|
7月前
|
存储 弹性计算 安全
阿里云服务器ECS通用型规格族解析:实例规格、性能基准与场景化应用指南
作为ECS产品矩阵中的核心序列,通用型规格族以均衡的计算、内存、网络和存储性能著称,覆盖从基础应用到高性能计算的广泛场景。通用型规格族属于独享型云服务器,实例采用固定CPU调度模式,实例的每个CPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能稳定且有严格的SLA保证,在性能上会更加稳定,高负载情况下也不会出现资源争夺现象。本文将深度解析阿里云ECS通用型规格族的技术架构、实例规格特性、最新价格政策及典型应用场景,为云计算选型提供参考。
|
7月前
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
242 4
|
7月前
|
人工智能 自然语言处理 算法
DeepSeek大模型在客服系统中的应用场景解析
在数字化浪潮下,客户服务领域正经历深刻变革,AI技术成为提升服务效能与体验的关键。DeepSeek大模型凭借自然语言处理、语音交互及多模态技术,显著优化客服流程,提升用户满意度。它通过智能问答、多轮对话引导、多模态语音客服和情绪监测等功能,革新服务模式,实现高效应答与精准分析,推动人机协作,为企业和客户创造更大价值。
620 5
|
7月前
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
11月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
893 13
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
444 4
|
12月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
144 0

推荐镜像

更多
  • DNS