C++ 指针,指针引用,二级指针作为实参传入函数体,形参改变指向的问题

本文探讨了形参与实参的区别,指出值传递不会改变实参指向,指针和引用传递则会。特别是二级指针,实参的最内层内存地址会被修改。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、形参指向变化,实参指向不变

前提了解:无论是值传递,指针传递,引用传递,形参和实参都是完全不同的两个变量,都有各自不同的内存地址。只不过形参的生命周期只限于函数体的{}里。
在这里插入图片描述
此时输出*pD = 2;解释如下:

代码运行到箭头处,发现实参传入函数体后(int *b = pD之后)实参就已经失效了,所以得出函数调用时候实参的唯一用途就是将其值传给形参。

之前所学的地址传递会改变实参本质是:地址传递后形参去操控内存改变了内存中的值,进而导致实参内存的值变化。
而该图片中只是形参这个指针变量b指向发生了变化,与实参pD没有任何关系。

二、指针引用传递 改变实参指向

在这里插入图片描述
此时输出*pD = 1;解释如下:

传参时:int* &b = pD;
形参b是pD的引用变量,类型是int*
b=&a;//mean操控引用变量指向内存的值,也就是操控了实参pD指向内存的值,从而形参指向改变,实参指向跟着改变。

三、二级指针**传递 改变实参指向

二级指针:指向的内存中存储的是一级指针,该一级指针指向的内存中的才是真正的数据。
在这里插入图片描述
此时输出*pD = 1;解释如下:

b和&pD都是二级指针。都是嵌套两层内存之后存数据。但切记:也是两个完全不同的变量,只是传值后指向一样了。如下:
在这里插入图片描述
传参时:int* * b = &pD; 传参过程如上图;传参后,形参&pD同样在该代码块失效。
*b = &a; 对二级指针b外层内存地址的数据(也就是B)进行更改,从指向B改为指向了a的地址(1),从而原实参(二级指针)最内层内存地址中存的数据也变为了1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值