当前位置:网站首页>C语言 二级指针详解及示例代码
C语言 二级指针详解及示例代码
2022-07-28 09:59:00 【Java码农老王】
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。
如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。
假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示:

将这种关系转换为C语言代码:
指针变量也是一种变量,也会占用存储空间,也可以使用&获取它的地址。C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*。p1 是一级指针,指向普通类型的数据,定义时有一个*;p2 是二级指针,指向一级指针 p1,定义时有两个*。
如果我们希望再定义一个三级指针 p3,让它指向 p2,那么可以这样写:
int ***p3 = &p2;
四级指针也是类似的道理:
int ****p4 = &p3;
实际开发中会经常使用一级指针和二级指针,几乎用不到高级指针。
想要获取指针指向的数据时,一级指针加一个*,二级指针加两个*,三级指针加三个*,以此类推,请看代码:
运行结果:
100, 100, 100, 100
&p2 = 0X28FF3C, p3 = 0X28FF3C
&p1 = 0X28FF40, p2 = 0X28FF40, *p3 = 0X28FF40
&a = 0X28FF44, p1 = 0X28FF44, *p2 = 0X28FF44, **p3 = 0X28FF44
以三级指针 p3 为例来分析上面的代码。***p3等价于*(*(*p3))。*p3 得到的是 p2 的值,也即 p1 的地址;*(*p3) 得到的是 p1 的值,也即 a 的地址;经过三次“取值”操作后,*(*(p3)) 得到的才是 a 的值。
假设 a、p1、p2、p3 的地址分别是 0X00A0、0X1000、0X2000、0X3000,它们之间的关系可以用下图来描述:

方框里面是变量本身的值,方框下面是变量的地址。
边栏推荐
猜你喜欢

语音聊天app——如何规范开发流程?

OSPF expansion configuration, routing principles, anti ring and re release

剑指offer

Performance test of API gateway APIs IX in Google cloud T2a and T2D

TCP Basics
JWT login authentication + token automatic renewal scheme, well written!

Redis interview questions must be known and learned

ADVANCE.AI出海指南助力企业出海印尼,掌握东南亚市场半边天

15、判断二维数组中是否存在目标值

JS promotion: the underlying principle of flat tiling
随机推荐
Holy Grail of web and double wing layout, float, clear, both
In retaliation for the dismissal of the company, I changed all code comments of the project!
CGAL编译错误
指令系统超全知识点详解
Joint search set
On July 13, 2021, we collapsed like this
Thinking and summary of technical personnel | R & D Efficiency
B2B2C系统亮点是什么?如何助力珠宝首饰企业打造全渠道多商户商城管理体系
【云驻共创】企业数字化转型,华为云咨询与你同行
Step 4 - user development environment settings
海量数据TopN问题
leetcode076——数组中的第 k 大的数字
小黑重新站起来看leetcode:653. 两数之和 IV - 输入 BST
上下文变量值(context values)陷阱及在 Go 中如何避免或缓和这些陷阱
Boss: there are too many systems in the company. Can we realize account interworking?
建筑建材行业B2B电子商务网站方案:赋能建材企业转型升级,实现降本提效
Go 内存模型 (2014年5月31日版本)
uni-app进阶之创建组件/原生渲染
12、双指针——合并两个有序链表
9、删除链表中节点