二级指针和指针引用函数传参(C++)

C++学习笔记之二级指针&指针引用 函数参数传递就是将指赋值给入参,当入参是指针时,传递的是指针的地址,在函数内新申请一个新指针,与入参指针指向相同地址。在函数内操作的是指针指向的值。 一级指针用作函数入参数 下方代码是一级指针作为参数的案例,因为声明的MyStruct* pMyStruct01指针为null,所以指针pMyStruct01 = 0,fun01入参将0传递给MyStruct* p,所以在p没有申请空间之前p = 0,... 阅读详情

在函数的使用过程中,我们都明白传值和传引用会使实参的值发生改变。那么能够通过传指针改变指针所指向的地址吗?

在解决这个问题之前,也许我们应该先了解指针非常容易混淆的三个属性:
①.指针变量地址(&p)
②.指针变量指向的地址(p,存储数据的地址)
③.指针变量指向的地址的值(*p)
当我们将指针变量与其它变量比较之后就会发现,指针变量同其它变量是相似的,只是多了最后一种操作。比如一个int类型的变量,int x=5;&x取出存储5这个数据的地址,同样,&p也是存储指针的地址,p就是这个地址里面保存的值,也就是指向的地址。只是与其它变量不同的是,它除了这两种操作之外,还有一个解引用操作符(*p)去获取指针变量指向的地址里面保存的值。
指针图解
一.指针引用

void make(int *pp)
{
    pp=new int(66); //试图改变p指向的地址
}
int main()
{
     int a=5;
     int *p=&a; //指针变量指向一个int类型的地址
     cout<<"address:"<<&a<<"       value:"<<a<<endl;
     cout<<"address:"<<p<<"       value:"<<*p<<endl;
     make(p);
     cout<<"address:"<<p<<"       value:"<<*p<<endl;
}

运行结果如下:我们这里虽然使用的是传指针,但是却不是直接改变指针变量指向的地址的值,却是想通过改变指针变量指向的地址来修改它的值,显然这样失败了。
结果:
如果我们希望在函数里面修改指针变量存储的地址而不是它的值,这个时候就需要指针引用了。类似于普通变量传入变量引用,我们也传入一个指针引用,在函数里面,你可以将pp认为和p都是这个指针变量(&p==&pp),不似传入指针参数的时候形参和实参的变量(&p!=&pp)地址不一样。此时我们操作pp的值就是更改了p的值。

void make(int *&pp)
{
    pp=new int(66); //改变p指向的地址
}

运行结果如下:当我们修改传入参数为指针的引用的时候就可以修改指针变量所指向的地址了,可以看见,传入指针引用可以修改指针变量的值(p)和指向的值(*p)。
结果:
二.二级指针
指向指针的指针变量称为二级指针。
如果pp是一个二级指针,那么有如下属性:
①.二级指针的地址(&pp)
②.二级指针的地址保存的地址(pp)
③.二级指针的地址保存的地址,该地址里面保存的地址(*pp)
④.二级指针的地址保存的地址,该地址里面保存的地址里面的数据(**pp)
二级指针:
除了上面传入指针引用改变一级指针指向的地址以外,我们还可以通过传入一个二级指针去修改它对应的一级指针指向的地址,同样达到了修改指针变量的效果。二级指针的指向的地址存储的值就是一级指针指向的地址。对一级指针变量解引用得到的是指针指向的地址存储的数据,二级指针变量解引用得到的也是该二级指针指向的地址存储的地址值。

void make(int **pp)
{
   int * p=new int(66);
    *pp=p; //二级指针的解引用被赋值需要得到一个一级指针变量,上图中二级指针的示意图中*pp=p
}
int main()
{
     int a=5;
     int *q=&a;
     int **pp=&q;
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"       value:"<<*q<<endl;
     make(pp);
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"       value:"<<*q<<endl;
}

运行结果如下:通过对二级指针的解引用赋值成功修改了一级指针指向的地址。如果仅仅在make函数里面对**pp=66;操作,那么所有的地址不会改变,仅仅会改变值为66。

C语言关于链表的代码看不懂?一篇文章让你拿捏二级指针并深入理解函数参数列表中传参的多种形式 这篇博客即将解决你看不懂或者不会写链表的基本操作的问题,对于初学者而言,有很多地方肯定是费解的。比如函数的参数列表的多样化,动态分配内存空间函数malloc等,其实这些知识和指针联系紧密,尤其是二级指针。那么开始好好的学习这篇博客吧!...... 阅读详情

相关推荐

西电计组实验一 存储器实验

计组实验报告 实验一 存储器实验——FPGA中LPM_ROM定制与读出实验 一.实验目的   1.掌握FPGA中lpm_ROM的设置,作为只读存储器ROM的工作特性和配置方法;   2.用文本编辑器编辑mif文件配置ROM,学习将程序代码以mif格式文件加载于lpm_ROM中;   3.在初始化存储器编辑窗口编辑mif文件配置ROM;   4.验证FPGA中mega_lpm_ROM的功能。 二.实验原理   ALTERA的FPGA中有许多可调用的LPM (Library Parameterized Modu

Polaris的博客 1万+

C语言之指针的使用(三)

通过指针引用字符串 在C语言程序中,字符串是存放在字符数组中的 ,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明“%s”输出该字符串,通过字符指针变量引用字符串常量 C语言对于字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放该字符串常量,但是这个字符数组是没有名字的,因此不能通过数组名来引用,只能通过指针变量来引用   对字符指针变量初始化,实际上是...

Youth_R的博客 1338

GB28181协议心跳机制:从标准解读到代码实现的保活策略

本文深入解析GB28181协议中的心跳机制,从标准解读到代码实现,详细介绍了保活策略的核心价值和底层逻辑。通过实战案例和技术要点,帮助开发者优化心跳间隔、超时次数等参数配置,提升安防监控系统的可靠性和性能。文章还提供了代码实现的防坑指南和特殊场景处理建议,适用于各类网络环境下的设备在线状态管理。

weixin_29611239的博客 105

c语言指针赋值指针变量赋值吗,C语言_指针变量的赋值与运算,很详细

指针变量的赋值指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,否则将引起错误。在C语言中, 变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。 C语言中提供了地址运算符&来表示变量的地址。其一般形式为: & 变量名; 如&a...

weixin_42471237的博客 1万+

uniapp实战:5分钟搞定PDA激光扫码功能(附完整代码)

本文详细介绍了在Uniapp应用中快速集成工业PDA激光扫码功能的实战方案。通过解析PDA硬件扫码与手机摄像头扫码的核心机制差异,提供了完整的广播监听封装类代码,并演示了在Vue页面中的集成使用方法,帮助开发者高效解决仓储、零售等行业的条码扫描需求。

weixin_29239661的博客 456

STM32驱动AD7779:双极性电源下8通道同步ADC的SPI配置与数据采集实战

本文详细介绍了在双极性电源供电下,使用STM32通过SPI接口驱动AD7779同步ADC芯片实现8通道高精度数据采集的实战经验。重点解析了电源设计、抗干扰处理、寄存器配置、SPI通信技巧及数据校准方法,帮助工程师解决工业测量中的同步采样与噪声控制难题。

e3f4g5的博客 370

使用二级指针传出参数

使用指针传出参数时,要注意指针所指向的内存是在函数内分配的还是在函数外分配的,以及是不是在堆上分配的。 定义一个指针,但是并没有分配指针指向对象所需的内存空间;当函数返回后,此函数栈中的内存会被释放掉,不要让指针指向此函数栈中的内存空间; 要指向堆上或此函数外的内存空间。 1. 参数传递的原则是:形参传给实参,不能反向传递; 2. 一级指针可以在函数内部修改实参指针指向的内容; 如: void f(char *p) {p[2] = a; //由实参指向的函数外部的数组的内容就被改变了。…

weixin_42408832的博客 2233

飞傲Fiio+foobar2000 实现dsd解码+灯正常显示

飞傲Fiio+foobar2000 实现dsd解码+灯正常显示。安装后可将DSD格式的数据通过ASIO驱动传输至DAC。安装后可识别DAC的ASIO驱动。安装后可识别DSD文件。

yanlei7993的博客 2301

二级指针传参

关于二级指针传参的相关内容

m0_69726670的博客 410

Transformer代码(Pytorch实现和详解)!!!

这个是第一版,有些代码如果不对,欢迎在评论指正,后续会慢慢改,我也是刚接触transformer,若有些地方理解不对还请指正。

xml的博客 5613

AMDGPU驱动中Doorbell与Event机制简要对比

摘要:AMDGpu驱动中,Doorbell和Event是两种异步通知机制。Doorbell是CPU→GPU的单向硬件通知,通过写MMIO寄存器触发GPU拉取任务,延迟低且无需内核介入,适用于队列任务提交。Event是GPU→CPU的双向同步通知,基于中断和内核事件对象,支持阻塞等待,用于任务完成或异常上报。核心区别在于方向、用途和实现方式:Doorbell侧重任务触发,Event侧重状态反馈。两者配合实现高效的任务下发与完成通知流程。

图形/计算GPU的驱动与虚拟化技术分享园地 1859

【C语言指针三】一维数组传参的本质、冒泡排序、二级指针、指针数组、指针数组模拟二维数组、字符指针变量

文章摘要: 本文深入探讨C语言指针进阶知识,涵盖一维数组传参本质(传递首元素地址)、冒泡排序实现、二级指针运算规则、指针数组概念及应用。通过图解分析指针数组模拟二维数组的原理,并解析字符指针变量的两种使用场景,特别强调常量字符串不可修改的特性。最后以代码示例验证数组与指针的地址差异,帮助读者全面掌握指针核心用法。 (150字)

2501_93623544的博客 1675

2026.3.28:langgraph使用mysql进行持久化会话存储(短期记忆和长期记忆)

本文介绍了如何使用MySQL持久化存储LangGraph会话数据(短期和长期记忆)。首先安装必要的依赖包,然后通过Python代码实现将短期记忆写入MySQL数据库。主要步骤包括:1) 建立MySQL连接;2) 创建代理(agent)并配置检查点(checkpointer)和存储(store);3) 实现工具函数如计算器和天气查询;4) 使用中间件跟踪工具和模型调用次数。最后展示了如何从MySQL读取短期记忆数据,完成会话的持久化存储和检索功能。代码示例包含完整的实现细节,包括状态管理、消息处理和数据库操作

拥抱具身智能,昇腾Ascend C 735

【c语言】函数传参

在使用自定义函数时,会用到函数传参,今天给大家分享一下函数的传参是设计的呢??!!

yyqzjw的博客 1328

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C语言指针进阶_字符指针、指针数组、数组指针、函数指针等的介绍

C语言指针进阶_字符指针、指针数组、数组指针、数组指针定义、数组指针的解引用、数组指针的使用、数组传参和指针传参、一维数组传参、二维数组传参、一级指针传参、二级指针传参、函数指针、函数指针的使用等的介绍。数组传参,形参的部分可以写成数组,也可以写成指针。void test(int arr[]) // arr是一维数组,可以用一维数组接收,一维数组可以不指定大小{}void test(int arr[10]) // 一维数组也可以指定大小{}

Farewell_me的博客 1934

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【进阶指针二】数组传参&指针传参&函数指针&函数指针数组&回调函数

【进阶指针一】字符指针&指针数组&数组指针https://blog.youkuaiyun.com/qq_64428099/article/details/125011487 1.数组传参 1-1一维数组传参 正向:实参给定,猜猜看哪些形参该怎么写? 测试1: 注:这里没有要求打印,所以没有传元素个数sz 测试2: void test2(int* arr2[10])//bingo void test2(int* arr2[])//bingo void test2(...

每天都要坚持刷题的博客 1368

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【C语言】指针篇(指针数组,数组指针,函数指针,一级、二级指针)

本篇包含了指针所有的知识点,包括指针的使用方法,野指针问题,指针类型的判断,一级指针,二级指针,指针常量和常量指针,指针数组和数组指针,数组传参和指针传参,函数指针和函数指针数组,以及指向函数指针数组的指针,回调函数等等。

炸掉地球的博客 2042

C语言指针:数组名、二级指针

一维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式,数组传参本质上传递的是数组首元素的地址。 二级指针解引用一次得到的就是指向的一级指针,二级指针解引用两次得到的就是一级指针指向的对象。

m0_62183318的博客 1045

详解C指针+小型计算器项目

指针1. 字符指针2. 数组指针3. 指针数组4.数组传参和指针传参5. 函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函数

编程SHARE的博客 1万+

深入理解C语言的指针(一)

文章目录深入理解指针地址字符指针指针数组数组指针数组指针的定义:**“&数组名”和“数组名”**数组指针的使用一维数组传参二维数组传参一级指针传参二级指针传参函数指针什么是函数指针怎样使用函数指针函数指针数组函数指针是什么函数指针的使用 深入理解指针 指针学习是C语言中十分重要的一个环节,利用指针,学会了指针的知识后,我们会对系统的内存有更为清晰的认识,也对更为底层的程序,这样就是C语言经久不衰的原因。 地址 了解指针之前我们要了解地址 内存被划分为以字节为单位的空间 每一个字节都有一个编号,这

cainiaochufa2021的博客 5722

C语言——指针详解(必收藏)

1.什么是指针? 1.1概念 简单的来说,指针就是地址。我们口头上说的指针其实指的是指针变量。指针变量就是一个存放地址的变量。 1.2指针的大小 指针在32位机器下是4个字节,在64位机器下是8个字节。注:(指针的大小与类型无关) 1.3指针类型的作用 上面涉及到指针的大小与指针类型无关,那么指针类型的作用是什么呢? 指针解引用访问,使用的访问权限是多少 话不多说,上图! 当一个int* 的指针+1,跳过4个字节;当一个char* 的指针+1,跳过1...

weixin_59174190的博客 7万+

深入理解指针(3):数组传参本质,二级指针,指针数组,冒泡排序

本文主要讲解了C语言中数组和指针的相关概念及应用。首先分析了数组名的本质是首元素地址,并讨论了两种特殊情况(&数组名和sizeof(数组名))。其次阐述了一维数组传参时实际传递的是首元素地址。接着介绍了二级指针的概念和使用方法,以及指针数组的特点和模拟二维数组的实现。最后详细说明了冒泡排序算法的原理和代码实现,包括优化方法。这些内容有助于深入理解C语言中数组和指针的关系及实际应用。

2502_91954313的博客 887

【C语言:深入理解指针二】

C语言指针的进阶,转移表、回调函数与qsort函数的模拟

weixin_69380220的博客 1717

【C语言进阶5——指针的进阶(2)】

指针的进阶(2)前言4、数组参数、指针参数4.1 一维数组传参4.2 二维数组指针4.3 一级指针传参4.4 二级指针传参5、函数指针6、函数指针数组总结 前言 本文接着上文,继续学习指针进阶的知识点: 数组参数、指针参数 函数指针 函数指针数组 4、数组参数、指针参数 编程时,有时要把数组或者指针传给函数,函数的参数该如何设计? 4.1 一维数组传参 //一维数组接收参数 void test(int arr[])//形参与实参的定义相同 {} void test(int arr[10])//形参与

taibudong1991的博客 4670

【C进阶】指针(一)

指针的主题,在初阶指针章节已经接触过了,我们知道了指针的概念:1.指针就是个变量,用来存放地址,地址的唯一标识一块内存空间(指针变量),内存单元是由编号的,编号==地址==指针2.指针/地址/指针变量的大小是固定的4/8个字节(32位平台/64位平台)3.指针是有类型的,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限4.指针的运算。

qq_73017178的博客 3765
上一篇: struct与指针
下一篇: (C++)函数参数传递中的一级指针和二级指针
like_study_cat
博客等级 码龄7年 44粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值