个人C++笔记(1) 引用(中)(c++中&引用)

个人C++笔记(1) 引用(中)(c++中&引用)

编码文章call10242025-05-08 11:56:435A+A-

在前一篇文章已经讲到引用的作用以及注意事项,接下来我们继续深入学习关于“引用”的知识

内容三:引用作形参 简化指针修改实参

我们在看到一些代码时会发现用引用作为函数参数。为了了解其中的奥秘可以通过比较的方式加深印象。

第一种情况:值传递 形参无法修饰实参

上图是一个简单的交换函数,很明显形参无法改变实参。换句话说,在main函数中调用这个交换函数,最后在main函数中输出两个值(实参)时会发现根本没有交换。如下图:

最后a=10,b=20。


第二种情况:地址传递 形参可修饰实参

同样作用的交换函数,换成用地址指针进行描述。指针是用来接收地址的。

当调用这个函数后再输出a,b发现两个值进行了交换,不像第一种情况。也就是说形参修饰了实参。


以上两种情况就是我们经常用的传递方式。如今学习“引用”后,我们有了一个新的方法进行传递,那就是“引用传递”。

第三种情况:引用传递 可以说是地址传递的一个特殊简化方式

同样是交换函数,传进去的是引用,不难发现写法与值传递非常相似,却有着和地址传递一样的效果,这也是为什么简化指针的原因。

引用传递作用同地址传递一样,形参会修饰实参。打印输出结果a,b的值会交换。


我们在整体再地看一下引用传递。

分析: 可以看成 int *a=a; int *b=b;相当于起了同样的别名进行修饰 别名可以与原名相同

所以交换别名 实际上也是在交换原名 即交换a,b

总结:引用传递 形参会修饰实参 可以简化指针修改实参


内容四:引用做函数的返回值

注意:不要返回局部变量的引用

结合上面两个图片,得出test01这个方法返回的是局部变量a的引用,在main函数中用ret进行接收。换句话说,ret是局部变量a的别名。

我们知道局部变量是放在栈区的,方法结束后由系统自动释放(第一次保留),因此打印结果如注释所示,第一次正确,第二次乱码。


为了避免这样的事情发生,正确做法:在局部变量前使用static关键字变成静态变量,放在全局区,整个程序结束系统自动释放。

这样无论打印多少次都是ref2=10。


用法:若函数的返回值是引用,该函数调用可以作为左值(等号左边)

上面只是在将引用作为返回值需要注意不能返回局部变量的引用,接下来讲的是其用法。

若某函数的返回值为引用,则该函数调用可以作为左值。

分析:test02() return a 相当于 a=1000;

又因为ref是a的别名,所以后面两个ref2=1000


我们还是需要慢慢将这些知识进行消化,感谢大家的观看与支持

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4