C++中传值,传指针,传引用的区别

转载自:https://blog.csdn.net/Jamesjjjjj/article/details/88034115

当调用函数时,传递的参数有传值、传指针、传引用这三种形式。

直接传值是直接开辟了一个跟主函数实参一样的空间(地址不一样),里面存放了了跟实参一样大小的值,就相当于数值大小相同但是位置不同。你在这个调用函数里使用这个一样大小的值,完全不影响主函数实参的值。就好比主函数的空间就是一栋楼,里面的一个房间里放着一些东西(相当于实参变量值)。现在我调用了一个函数,就相当于我在另一栋楼的另一个房间里面,把刚才第一个放东西的房间里面存的东西完全复制过来,所以你操作现在这个房间里面的东西,完全不影响原来的房间的东西呀。

传指针就不一样了。指针就是地址,我们要去找一个房间里面的东西,那么你得先找到门牌号,才能对照着门牌号去找到房间,从而找到你想要的东西,这就是指针的使用原理。传指针就是把实参的地址传过去了,而不是像刚才传值一样,直接开辟一个新的空间去复制数值,而是开辟了一个新的空间把实参的地址复制了过去。主函数的空间就是一栋楼,里面的一个房间放着一些东西(相当于实参变量值),这个房间有个门牌号(也就是实参的地址)。现在调用函数,就好比我把他家的门牌号(实参的指针)给你,跟你说你按照这个门牌号去找这个房间,然后再去找里面的东西。这样一来,你根据门牌号找到了原来的房间,一旦修改房间里面的东西,就一定会产生改变。所以根据指针修改指向的变量时,如果调用函数进行了修改,主函数的变量也就被修改了。

传引用就是传指针的升级版。引用可以看成变量的别称,就好像Tony老师的本名就叫赵铁柱一样,名字不一样但是人就是那一个人。所以你传引用的时候,修改了调用函数里的传递参数值,主函数的对应变量也会随之改变。但是原理还是传递指针,也就是地址。传引用的时候实际上是拷贝了实参的地址,然后你在调用函数里的操作表面上看是对变量的直接赋值,实际上是通过找到地址再改变变量的,这是一种间接寻址。但是为啥不直接用指针找地址再操作呢?而是封装成引用的外表了,很大的原因是安全。因为直接指针操作,那你很可能改变了指针,然后就找不到原来的地址了。就好比,我现在要去找房间(调用了其他函数要去访问主函数的实参变量值),然后给了你一块门牌号(相当于指针,也就是地址),万一你一不小心掉沟里了,门牌号弄丢了(指针被错误的修改),那你就找不到原来的房子了呀,你要是还继续去找错误的房子,把别人家房子里面的东西改了,等下直接程序就出错了(走错家门很危险的…)。所以别人就是怕你乱改,直接就给你封装好了。引用其实还可以让代码更加简洁清晰,一目了然(因为就相当于同一个变量在操作的感觉)。C语言是没有传引用的,C++把它加上了。原因我觉得是更方便了,也更安全了。

原文链接: https://www.cnblogs.com/vivian187/p/15789139.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++中传值,传指针,传引用的区别

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/184784

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 上午10:48
下一篇 2023年2月12日 上午10:48

相关推荐