关于传递指针与传递引用作参数的测试

本文通过单链表实例,深入探讨了在C/C++中使用指针和引用作为函数参数的区别。详细解释了为何传递指针仅复制值,而传递引用则能直接修改原数据,为读者解开参数传递的疑惑。

前言

单链表作示范,对比传递指针作参数传递引用作参数的不同之处。


传递指针作参数

测试代码图示
在这里插入图片描述


说明:我先在主函数创建了一个节点存放值111,然后在CreateLink()CreateLink()CreateLink()函数中创建另一个值为222的节点并让头指针指向此节点。此时链表有两个单元,值1−>21->21>2

1.未改动代码:
如图黑色部分,我最初认为传递指针作参数,即可让实参中的指针随着函数中的操作而变化。然而如上所示的代码显示的结果却是:111 222
既然在CreateLink()CreateLink()CreateLink()函数改变了头指针的指向,为什么在从头结点开始遍历时,结果依然不变呢?

2.改动代码后:
对代码作如图所示的改变,此时再执行ShowLink()ShowLink()ShowLink()函数,发现达到了想要的结果——222

分析:
被调函数的参数均作为局部变量
对于传递指针来说,指针传递的本质是值传递,也就是说,被调函数在栈中开辟了一块空间作为该实参值的副本。被调函数对形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值也就是说形参指针变了,实参指针不会变。实参的指针还是指向原来的位置。


传递引用作参数

在这里插入图片描述


说明:如下修改后也可得到想要的结果——222

分析:
引用传递时,被调函数的参数同样作为局部变量。但是此时栈空间中存放的是由主调函数传进来的实参的地址,被调函数对形参的任何处理都会变成 间接寻址 后的操作。因此可以达到修改主调函数参数地址的目的。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值