C++程序设计——三

实验目的

掌握C++中函数传参数的三种用法

实验内容

在C++中,参数传递的方式是实虚结合,可分为三种传递方式:按值传递(pass by value);地址传递(pass by pointer);引用传递(pass by reference)

按值传递

按值传递的过程为:先计算出实参表达式的值,然后给对应的形参变量分配一个存储空间,该空间大小与该形参类型相同,然后把以求出的实参表达式的值一一存入到形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。
这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为“按值传递”。
使用这种方式,调用函数本身不对实参进行操作,也就是说,即使形参的值在函数中发生了变化,实参的值也完全不会受到影响,仍为调用前的值。
在这里插入图片描述
这种按值传递的方式最简单最容易理解,相对来说用的也比较多

地址传递

地址传递就是指针传递,通过传递对应实参的指针,那么对形参指向的内存单元上的值进行操作时,就是对实参进行操作
在这里插入图片描述
在这里插入图片描述
这里要注意的是,指针传递,传递的是地址,所以在第39行,传入的是变量a和b的地址,即&a和&b;故在函数swap2中,即在swap2这里,形参a和b不再是数值,而是地址,函数中修改的是a和b,即修改了指针a和指针b指向的内存单元上的数值,所以外面实参的值也被改变了。
(这里要额外说明的是,在C++中,*是取值运算符,对地址使用可以获得地址中存储的数值;&是地址运算符,对变量使用可以获得该变量的地址。)

引用传递

在引用传递中,形参相当于是实参的别名,所以对形参的操作就是对实参的操作。在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。
被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
在这里插入图片描述
在这里插入图片描述

实验总结

对比三种函数传递参数的形式,按值传递最简单,它传入的是数值,而被调函数会申请新的内存来存储这个数值,所以被调函数中形参的改变不会影响实参的改变;
指针传递传入的是地址:&a
被调函数接收的是对应地址上的值:*a
对 *a进行操作,实参地址对应内存单元上的值也被改变,就是实参也被改变;
引用传递传入的是变量的数值,但被调函数接收的是该数值的地址,并对该变量起一个别名,对形参进行操作,就相当于对实参进行操作,所以实参也被改变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值