双重指针

双指针的运用 双指针常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。1.1 对撞指针:⼀般⽤于顺序结构中,也称左右指针。•对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼近。•对撞指针的终⽌条件⼀般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循环),也就是:◦(两个指针指向同⼀个位置)◦(两个指针错开)1.2 快慢指针:⼜称为⻳兔赛跑算法,其基本思想就是使⽤两个移动速度不同的指针在数组或链表等序列结构上移动。 阅读详情
转载http://www.diybl.com/course/3_program/c++/cppjs/2008426/111630.html
双重指针」也有人称为「指针的指针」,其作用为「间接参照」,但无论是哪一个名词,都是令人困惑的,其实指针就是指针,所谓的多重指针,其实还是指针,它们的作用单纯来说,都是用以储存记忆体位址。
正在装载数据……


思考一个问题,当您要取得int变数的记忆体位址时,会使用int*来宣告指针,要取得double变数的记忆体位址时,会使用double*来宣告指针,这是因为它们在进行加减法运算时,所位移的单位并不相同,而是根据它们的资料型态而定,而如果您只是要储存一个记忆体位址,您就宣告指针为void* 型态。

指针可以用来储存(某变数的)记忆体位址,所以指针本身就是一个变数,也要占有记忆体空间才能储存资讯,那么指针的记忆体空间位址在哪呢?同样的使用 &运算子就可以得知了,例如:
#include <iostream>
using namespace std;

int main() {
    int p = 10;
    int *ptr = &p;

    cout << "p的值:" << p
         << endl;
    cout << "p的记忆体位置: " << &p
         << endl;
    cout << "*ptr参照的值: " << *ptr
         << endl;
 
    cout << "ptr储存的位址值: " << ptr
         << endl;
    cout << "ptr的记忆体位置: " << &ptr
         << endl;
 
    return 0;
}

执行结果: p的值:10
p的记忆体位置: 0x22ff74
*ptr参照的值: 10
ptr储存的位址值: 0x22ff74
ptr的记忆体位置: 0x22ff70


  


由以上的范例,您知道ptr在记忆体中的0x22ff70占据空间,并储存了0x22ff74这个值,0x22ff74也就是p在记忆体中的位置,该位置储存了10这个值。

如果在上例中,您要储存ptr的记忆体位址,也就是0x22ff70这个值,那么如何作?由于ptr是个int*型态变数,如同int变数必须宣告 int*指针,所以int*型态变数就必须宣告int**型态的指针,例如:
int **ptr2 = &ptr;

下面这个程式可得仔细看看:
#include <iostream>
using namespace std;

int main() {
    int p = 10;
    int *ptr1 = &p;
    int **ptr2 = &ptr1;

    cout << "p的值:" << p << endl;
    cout << "p的记忆体位置: " << &p << endl;

    cout << endl;

    cout << "*ptr1 = " << *ptr1 << endl;
    cout << "ptr1 = " << ptr1 << endl;
    cout << "ptr1的记忆体位置: " << &ptr1 << endl;

    cout << endl;
 
    cout << "**ptr2 = " << **ptr2 << endl;
    cout << "*ptr2 = " << *ptr2 << endl;
    cout << "ptr2 = " << ptr2 << endl;

    cout << endl;
 
    cout << "整理(谁储存了谁?):" << endl;
    cout << "&p = " << &p << "/t/t" << "ptr1 = " << ptr1 << endl;
    cout << "&ptr1 = " << &ptr1 << "/t"
         << "ptr2 = " << ptr2
         << endl;
 
    return 0;
}

执行结果: p的值:10
p的记忆体位置: 0x22ff74

*ptr1 = 10
ptr1 = 0x22ff74
ptr1的记忆体位置: 0x22ff70

**ptr2 = 10
*ptr2 = 0x22ff74
ptr2 = 0x22ff70

整理(谁储存了谁?):
&p = 0x22ff74 
 


-
欢迎光临DIY部落,收藏本篇文章   【点击打包该文章】
[1] [2]
文章出处:http://www.diybl.com/course/3_program/c++/cppjs/2008426/111630.html
C中双重指针的使用的易错点 写blog之前,看了很多优快云的文章,都表示坚持写blog对一个程序员来说是很好的习惯,我以前也觉得写blog也只是浪费时间和精力,觉得自己弄懂了就好,然而事实上过一段时间后碰到相同的问题却还是需要时间去回忆和查找记录,这也就让我产生了开始写blog的想法。这是我的第一篇blog,的写的不好之处请大家见谅。 言归正传,在c的使用中能用到双重指针的地方不多,其中一个地方就是函数传指针却没有改变指针 阅读详情

相关推荐

【Qt串口调试助手】1.1 - Qt5编写串口调试助手,Qt串口编程

这章来学习串口数据流操作。仿照成品制作一个自己用Qt编写的串口助手。 1. 布局UI界面 创建QWidget工程,布局UI界面:拖入2个 Plain Text Edit,作为串口数据的接收显示和发送框。 拖入几个 Combo Box 、Label 和 Push Button,使用两个Widget进行布局。如下所示。 将接收区的 Plain Text Edit,属性勾选上 readOnly,使其运行时不会被人为的输入操作影响。 加入一些弹簧,使布局美观。(有必要可以加设置不能调整..

Mark_md的博客 9272

双重指针的用法

双重指针的定义是指向指针数据的指针变量,简单来说指向指针的指针。 作用1:改变一维指针的指向。 作用2:借助双重指针一系列操作直接改变存储的值。

qq_51197244的博客 6612

十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

冒泡排序、选择排序、插入排序、快速排序、希尔排序

HK的博客 18万+

C语言 - 二重指针,二维数组

1.二重指针 (1)二重指针与普通一重指针的区别 ->本质上来说,二重指针和一重指针的本质都是指针变量,指针变量的本质就是变量。 ->一重指针变量和二重指针变量本身都占4字节内存空间。 ...

weixin_49303682的博客 7044

JS实例(三)图片的缓慢放大和缩小

  我们经常能看到在一些网站中可以通过按钮实现对图片的放大或者缩小,也有可能是鼠标经过时图片放大。在本例中就是通过JavaScript实现图片的放大和缩小。   首先是进行简单的页面布局 1 <div class="imagedispose"> 2 <img src="1.jpeg" id="imaged" width="400px" height="3...

weixin_34235105的博客 312

SpringBoot 通过 JMS 集成 IBM MQ

IBM MQ 作为老牌的企业级消息中间件,虽然在当下云原生时代已不再是主流选择,但在金融、银行、保险等传统行业的核心业务系统中仍然占据着重要地位。这些行业对系统的稳定性、可靠性和事务一致性有着极高的要求,IBM MQ 正是在这些方面表现出色。尽管近年来 RabbitMQ、Apache Kafka 等新一代消息中间件在新兴项目中更受欢迎,但许多金融公司和大型企业仍在使用 IBM MQ 作为核心业务系统的消息传递基础设施。

小单的博客专栏 947

C语言指针(二重指针)

1.二重指针 1.1、二重指针与普通一重指针的区别 (1)本质上来说,二重指针和一重指针的本质都是指针变量,指针变量的本质就是变量。 (2)一重指针变量和二重指针变量本身都占4字节内存空间, 1.2、二重指针的本质 (1)二重指针本质上也是指针变量,和普通指针的差别就是它指向的变量类型必须是个一重指针。二重指针其实也是一种数据类型,编译器在编译时会根据二重指针的数据类型来做静态类型检查,一旦发现运算时数据类型不匹配编译器就会报错。 (2)C语言中如果没有二重指针行不行?其实是可以的。一重指针完全可以做二重指

shark_93的博客 8596

在Unity3d使用yolov8的onnx模型

输出OUTPUTS是float32[1,35,8400],表示它会输出一个大小为[1, 35, 8400]的浮点数张量。这个输出张量的维度表示了检测到的目标的数量、每个目标的预测参数以及网格单元的数量。输出张量的第一个维度1表示检测到的目标数量。每个目标由35个值组成,表示目标的类别、置信度、边界框的坐标及10个特定点的位置。要取得8400个数据中置信度最高的数据,然后获取该数据其他channel的数据。运行结果:(蓝色是检测手的边框,红点是自定义的点),其中的四个数字分别表示不同的维度。

shenqingyu0605202324的博客 5601

双重指针的使用

这几天看yolov3程序,里面有双重指针的调用,不是很了解,所以转载了双重指针的用法这篇文章。 首先看一道习题: char GetMemory(char *memorystr,u8 num) { memorystr = (char*)malloc(num); } int main(void) { char *str = NULL; GetMemory(str,6)...

weixin_41637329的博客 1155

嵌入式开发 DSP芯片运行方式(挖坑-填坑中-坑已平 :))

TMS320F28335 DSP 芯片 如何将运行代码放在不同的位置

FOOLCODE的专栏 1305

PCA9548实战:从硬件连接到Linux驱动的I2C扩展全解析

本文详细解析了PCA9548 I2C多路复用器从硬件连接到Linux驱动配置的全过程。涵盖硬件引脚连接、电源去耦、地址选择等关键设计要点,以及Linux驱动加载、设备树配置和应用层编程技巧,帮助开发者高效实现I2C总线扩展。

weixin_28726391的博客 405

如何理解双重指针

单重指针已经够蛋疼了,c语言中还引入了双重指针,甚至若干重指针。使得这个情况变得更加复杂。虽然以前一直觉得双重指针也不过如此,指针的指针嘛,还不是照样理解,但是上一次重删代码中,因为管理海量数据,引入了大量的指针操作,并且为了函数封装,采用了指针作为参数来传递。因此出现了较多问题,现在感觉很有必要写一篇有关双重指针的博文。 先看一个例子: 程序1 void change(ch

Hist_花透的博客 2677

RT-DETR改进策略【RT-DETR和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。Depth Information Assisted Collaborative Mutual Promotion Network for Single Image DehazingLE

Limiiiing的博客 915

指针和双重指针

指针和双重指针

初学者的学习播客 670

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

为什么使用双重指针

一般情况下我们不使用指向指针的指针,因为这带来了操作的复杂性。但有些情况下我们不得不用。当指针作为一个函数的参数输出时,它的作用就显示出来了。例如:设计一个函数:void fun1(char sz[], char search, char * pa)要求:这个函数参数中的数组array是以0值为结束的字符串,要求在字符串sz中查找字符是参数search里的字符。如果找到,函数通过第三个参数

zp_wan的专栏 4027

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++的双重指针

关键在于对int** ppa的理解,为了方便理解我写成了int* *ppa的形式,这样你就可以比较清晰的读出来,定义了一个指向int类型指针 的指针变量ppa。由上面的图其实就可以看出来*ppa == pa == &a,这就是关键所在,这里用的是"=="说明了它们是完全相等的,它们就是同一个东西:int a = 7;int b = 8;输出结果是:OK。

x3477144355的博客 655

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C语言的双重指针

关键在于对int** ppa的理解,为了方便理解我写成了int* *ppa的形式,这样你就可以比较清晰的读出来,定义了一个指向int类型指针 的指针变量ppa。由上面的图其实就可以看出来*ppa == pa == &a,这就是关键所在,这里用的是"=="说明了它们是完全相等的,它们就是同一个东西:int a = 7;int b = 8;输出结果是:OK。

x3477144355的博客 943

【一本通】双重指针运用举例

/ 通过包装类的方法获取值,输出三次相同的值,用等号连接。// 通过双重指针两次解引用,输出三次a的值,用等号分隔并换行。// 通过双重指针两次解引用,输出三次a的值,中间用等号连接。// 定义一个双重指针pp,指向指针p。// 创建指针p,使其指向变量a。// 定义一个指针p,指向变量a,此时。使用多重指针输出a=a=a。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 4164

双重指针作为函数参数的妙用

指针加加 #include <stdio.h> #include <stdlib.h> #include <string.h> void setDataCond(int *p, unsigned int condi) { if (condi % 2) { *p = condi * 10; p++; } } void setDataCond_1(int **pp, unsigned int condi) { if (condi % 2) { *

hzgdiyer的专栏 2403

双重指针赋值

int *p; p=(int *)mallloc(sizeof(int)*len); *p=1;//p[0]=1 *(p+1)=2;//p[1]=2 二:双重指针赋值 bool **p; p=(bool**)malloc(sizeof(bool*)); cout<<"input array"<<endl; for(int i=0;i<m;...

何解然_K|user 1985

二维数组和双重指针

二维数组和双重指针 int a[3][4]; int **p; 如上是一个二维数组和一个双重指针,在普遍情况大多数人认为二维数组名a是可用一个双重指针来指向的,但是实际情况中这么做无法通过编译器。 为了弄清这么个问题,我们对二维数组和双重指针做一次分析。 二维数组 int a[3][4]; 对于二维数组a我们要知道其原理,二维数组a是一个包含了3个元素的一维数组,这三个元素每一个都是包含了4个整型元素的一维数组,也即二维数组a是一个元素为一维数组的一维数组。 那么数组名a, a[0], &a[0]

Arcofcosmos的博客 2604
上一篇: 简易的TTS程序
下一篇: 指向指针的指针
Co_Creating
博客等级 码龄19年 5粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值