C++中值传递和引用传递的区别

C++中值传递和引用传递的区别C 值传递和引用传递的区别一例呼醒迷中人

    最近补数据结构和算法时,捎带着学了些C++,刚好看到一篇关于值传递和引用传递的文章,收获颇丰,这里分享一下学习心得,当然,C#中也差不多。

    C++中参数的传递方式:

1.值传递

    调用时,将实参的值传递对应的形参,即为值传递。由于形参有自己独立的存储空间,又作为函数的局部变量使用,因此在函数中对任何形参值得修改都不会改变实参变量的值。简单的看一个例子:

C++中值传递和引用传递的区别

编译后,输出结果如下所示:

C++中值传递和引用传递的区别

从上图可以看出,主函数声明了两个全局变量a,b并对其赋值1,2;通过函数Swp()函数调用之后,在函数内部将a和b的值交换了,使得函数内,a=2,b=1;但是,这个过程并没有改变全局变量a和b的值。

我们分析一下函数的调用过程:函数Swap()被调用前,实参a和b有自己的存储空间,并且有自己的初始值。当调用函数Swap()时,为形参(即函数的参数)x和y分配存储空间,并将a和b的值复制过来,函数执行过程中,将x和y的值进行交换,当函数执行结束之后,x和y所占用的存储空间将被释放,这种传递的方式,并不会对实参a和b的值产生影响,此即为值传递。

2.引用传递

    引用传递是一种特殊的变量,它被认为是一个变量的别名。当定义一个引用时,其实是为目标变量起一个别名,引用并不分配独立的内存空间,它与目标变量公用其内存空间,当定义一个引用时,如果该引用不是用作函数的参数或者返回值,则必须提供该引用的初始值(即必须提供引用的目标变量名)如图:C++中值传递和引用传递的区别

b变量引用了a变量,可知a和b的值相等,均公用同一块内存地址,即变量b是a变量的一个别名。

将上面的值传递的示例代码修改为引用传递如下图所示:

C++中值传递和引用传递的区别

编译运行,输出结果如下所示:

C++中值传递和引用传递的区别

当函数未调用之前,实参a和b的值分别为1和2。当函数调用过程中,形参的值被交换,即a=2,b=1;函数调用结束之后,实参的值被改变。即函数调用时,作为形参的引用变量并不分配新的内存空间,它将作为实参变量的别名与其共用内存。

    欢迎关注我的公众号,会不定期的分享:设计模式、C++、数据结构和算法、Unity相关的文章:

C++中值传递和引用传递的区别

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199144.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午1:45
下一篇 2026年3月26日 下午1:45


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号