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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 指针深度应用、解析及辨析(附代码)

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

目录
相关文章
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术深度解析:从基础到应用的全面介绍
人工智能(AI)技术的迅猛发展,正在深刻改变着我们的生活和工作方式。从自然语言处理(NLP)到机器学习,从神经网络到大型语言模型(LLM),AI技术的每一次进步都带来了前所未有的机遇和挑战。本文将从背景、历史、业务场景、Python代码示例、流程图以及如何上手等多个方面,对AI技术中的关键组件进行深度解析,为读者呈现一个全面而深入的AI技术世界。
50 10
|
15天前
|
机器学习/深度学习 搜索推荐 API
淘宝/天猫按图搜索(拍立淘)API的深度解析与应用实践
在数字化时代,电商行业迅速发展,个性化、便捷性和高效性成为消费者新需求。淘宝/天猫推出的拍立淘API,利用图像识别技术,提供精准的购物搜索体验。本文深入探讨其原理、优势、应用场景及实现方法,助力电商技术和用户体验提升。
|
21天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
21天前
|
编译器 PHP 开发者
PHP 8新特性解析与实战应用####
随着PHP 8的发布,这一经典编程语言迎来了诸多令人瞩目的新特性和性能优化。本文将深入探讨PHP 8中的几个关键新功能,包括命名参数、JIT编译器、新的字符串处理函数以及错误处理改进等。通过实际代码示例,展示如何在现有项目中有效利用这些新特性来提升代码的可读性、维护性和执行效率。无论你是PHP新手还是经验丰富的开发者,本文都将为你提供实用的技术洞察和最佳实践指导。 ####
27 1
|
3天前
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
21 0
|
22天前
|
存储 供应链 算法
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
45 0
|
23天前
|
存储 监控 API
深入解析微服务架构及其在现代应用中的实践
深入解析微服务架构及其在现代应用中的实践
35 0
|
28天前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
100 13
|
2月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
36 0
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
124 4

推荐镜像

更多
下一篇
DataWorks