C++ 二级指针的理解

指针一直很抽象,不是很容易理解,尤其是二级指针。有天路上,脑子里突然想起二级指针,并开始思考什么是二级指针,经过分析和调试验证,对二级指针有了进一步的认识。故写下此篇。

一级指针

假设变量 a、p 的地址分别为 0X1000、0XF0A0,它们的指向关系如下图所示:

img

程序被编译和链接后,a、p 被替换成相应的地址。要使用 p获取a的值的话,需要先通过地址 0XF0A0 取得变量 p 本身的值(0X1000),这个值是变量 a 的地址,然后再通过这个值取得变量 a 的数据。

如果理解这上面的话,那么接下来就可以看看二级指针了。

二级指针

通过以下这段代码,进入调试模式,来看看二级指针到底是什么样子

int a = 10;
int* p = &a;
int** pp = &p;

在这里插入图片描述

变量如表格所示:

名称类型
a10int
p0x000000ddaed9fb84 {10}int *
10int
pp0x000000ddaed9fba8 {0x000000ddaed9fb84 {10}}int * *
0x000000ddaed9fb84 {10}int *
10int

可以看到,变量a的值是10,指针p的值是0x000000ddaed9fb84 ,这个地址指向10所处的内存地址,二级指针pp的值是0x000000ddaed9fba8 这个地址指向0x000000ddaed9fb84 内存地址。

接下来,再看一下内存
在这里插入图片描述
在这里插入图片描述

0x000000ddaed9fb84内存地址所存放的是0a(16进制),即10进制的10。

0x000000ddaed9fba8 内存地址所存放的是0x000000ddaed9fb84,即存的是p所在的内存地址。

通过调试能有个更直观的感受,现在看来,a不过存的是值10,p存的是值地址,pp同样也是存的值地址。

也就是说,二级指针pp本身就是指针,或者说‘’特殊的一级指针“,没什么特别的地方,无非就是存的数据有些差异。

那么如何将值取出来应该就很清晰了

int a = 10;
int* p = &a;
int** pp = &p;

int pa = *p; //解引用
int ppa = **pp; //二次解引用

最后,对二级指针的感悟又进了一步。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值