C++ 二级指针的理解

news2024/11/19 4:56:53

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

一级指针

假设变量 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; //二次解引用

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消息队列 rabbitmq 学习

RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数…

[YOLO] yolov4 博客笔记

在有了yolov3的基础上,yolov4的网络结构还是很容易看懂的。 这篇博客写的整个yolov4的网络概况 【经典论文解读】YOLOv4 目标检测https://blog.csdn.net/qq_41204464/article/details/119673960?ops_request_misc%257B%2522request%255Fid%2522%253A%25221677916…

SpringBoot一行代码实现文件上传20个平台!少写代码到极致!

又是做好人好事的一天,有个小可爱私下问我有没有好用的springboot文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴们也分享一下,demo地址放在文末了。文件上传在平常不过的一个功能,做后端开…

SpringBoot (三) 整合数据库访问 jdbcTemplate、MyBatis

哈喽,大家好,我是有勇气的牛排(全网同名)🐮🐮🐮 有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。 Spring Data了解下&#xff1…

实习日记_C#——Day2

运算符重载 通过关键字operator后跟运算符的符号来定义。 public static Box operator (Box b, Box c) {Box box new Box();box.height b.height c.height;return box; }Box box1 new Box(1); Box box2 new Box(2); Box box3 new Box(); bo3 box1 box2;接口&#xff…

基于灵动 MM32 微控制器的便携式血氧仪方案

基于灵动 MM32 微控制器的便携式血氧仪: - Cortex-M0() 最高主频 72MHz 可实现血氧饱和度信号采集、算法操作和 LED 显示操作 - 高性能的 1Msps 12b ADC 能对光电采样结果进行大数据量的暂存和处理,提高采样的效率并有助于对结果做高精度的计算 - 100…

排序中常见的一些指标

1、错误率与精度 错误率与精度是分类任务中最常用的两种性能度量,错误率是指分类错误的样本占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。 错误率: 精度: 2、准确率/召回率/FScore True Positive(真正例, TP)&…

SpringMVC中的常用注解

Java知识点总结:想看的可以从这里进入 目录3.2、常用的注解3.2、常用的注解 Controller:代表此类是一个控制器,需要配置包的扫描。Spring MVC 是通过组件扫描机制查找应用中的控制器类的 在Spring6.0之后要求控制层必须添加该注解才会被识别成…

c++11 标准模板(STL)(std::unordered_map)(二)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…

计算机网络-- 网络层(day06)

文章目录网络层思维导图IPv4地址的应用规划定长的子网掩码变长的子网掩码VLSMIP数据报的发送和转发过程主机发送IP数据报路由器转发IP数据报静态路由选择动态路由选择路由选择协议概述常见的路由选择协议路由器的基本结构路由信息协议RIP的基本工作原理开放最短路径优先OSPF的基…

nandflash VS norflash

介绍下nandflash NAND Flash是一种非易失性存储器&#xff08;Non-Volatile Memory&#xff0c;简称NVM&#xff09;&#xff0c;以闪存为基础&#xff0c;是目前应用最广泛的存储器之一。 它利用了固态电路技术&#xff0c;可以将数百万个晶体管集成在一张芯片上&#xff0c…

从输入URL到Web页面呈现的全过程

当用户在浏览器的地址栏中输入 URL 并点击回车后&#xff0c;页面是如何呈现的。 简单来说&#xff0c;当用户在浏览器的地址栏中输入 URL 并点击回车后&#xff0c;浏览器从服务端获取资源&#xff0c;然后将内容显示在页面上。这个过程经过了&#xff1a;浏览器缓存 -> D…

利用Nginx给RStudio-Server配置https

前篇文档&#xff0c;我这边写了安装RStudio-Server的方法。默认是http的访问方式&#xff0c;现在我们需要将其改成https的访问方式。 1、给服务器安装Nginx&#xff1a;参照之前的安装Nginx的方法。 2、创建/usr/local/nginx/ssl目录&#xff1a; mkdir /usr/local/nginx/ss…

P6入门:了解P6 Professional 工具栏及地图分享

目录 引言 相关分享 引言 凭借更大的灵活性和增强的自定义功能&#xff0c;最新版本的 Oracle Primavera P6 Professional 的界面比早期版本有了巨大改进。对于有经验的伙伴来说&#xff0c;它仍然是熟悉的领域&#xff0c;几乎所有预期的功能都显示在前面。该界面可以更好地…

【汇编】三、寄存器(一只 Assember 的成长史)

嗨~你好呀&#xff01; 我是一名初二学生&#xff0c;热爱计算机&#xff0c;码龄两年。最近开始学习汇编&#xff0c;希望通过 Blog 的形式记录下自己的学习过程&#xff0c;也和更多人分享。 上篇系列文章链接&#xff1a;【汇编】二、预备知识&#xff08;一只 Assember 的…

Spring Boot结合IDEA自带Maven插件快速切换profile | Spring Cloud 10

一、前言 IDEA是目前 Java 开发者中使用最多的开发工具&#xff0c;它有着简约的设计风格&#xff0c;强大的集成工具&#xff0c;便利的快捷键。 在项目项目整个开发运维周期中&#xff0c;我们的的项目往往需要根据不同的环境&#xff0c;使用不同的文件配置。 比如以下部…

机器学习:Transformer

Transformer sequence-to-sequence(seq2seq) 很大语音没有文本&#xff0c;7000种中超半数没有文字。 遇到的问题&#xff1a; 遇到问题时候可以先不管它&#xff0c;先出一个baseline看看效果&#xff0c;后续再进行提升。 tts&#xff1a; 文本转语音&#xff0c;语音合成…

【图神经网络】李宏毅

GNN 引入 假如要预测一个人是否是凶手。可以通过每个角色的特征训练出一个分类器。 有没有我们忽略的信息&#xff0c;或者我们可以利用但没有完全利用的信息。就是角色的关系。 这些角色关系可以让我们在做分类的时候获得一些额外的信息&#xff0c;可以帮助我们做更好的mode…

C++ 断言

文章目录前言assertstatic_assert前言 断言(Assertion)是一种常用的编程手段&#xff0c;用于排除程序中不应该出现的逻辑错误。它是一种很好的Debug工具。其作用是判断表达式是否为真。C提供了assert和static_assert来进行断言。在C库中也有断言&#xff0c;其中断言与C的相同…

java @Autowired @Resource @Inject 三个注解的区别

javax.annotation.Resourcejdk 内置的&#xff0c;JSR-250 中的注解。依赖注入通过 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor 来处理。org.springframework.beans.factory.annotation.Autowired org.springframework.beans.factory.annotati…