赞
踩
函数是构成c++程序的基本模块,每个函数均具有相对独立的功能。而参数是函数与主题之间的一个重要联系,理解了函数参数传递就能更好的应用好函数了。
函数的参数传递分为值传递,地址传递和引用传递三种类型。
1.值传递
在值传递中形参为基本类型变量,结构体类型变量和类类型变量。实参为相应的变量,常量和表达式。
值传递是一种单向传递,即只能把实参传递给形参,对形参的操作不能改变实参的值。(下面的程序将给出解释)
最终输出结果是:
66,88 88,66 66,88
我们可以看出在函数内部输出的数被改变了,但外部的却没改变。这里就做一个简单解释,不做累述了。
其实当代码运行到函数这部分时,实参(主函数定义的a,b)被传递给函数内的形参,此时函数内部创建了一个临时的内存空间储存实参的值,然后进行交换,最后输出,当函数结束后这个临时内存也被释放了。
所以整个过程中,主函数内部的实参一直放在原本的内存空间,函数只是相当于复制了一份然后自己进行改造,原来的值是不变的。
2.地址传递
在地址传递中形参为莫种类型的指针,实参为相应的地址(变量的地址和保存了某个地址的指针变量),所以被调用的函数中即可以操作指针也可以操作指针所指的数。
所以地址传递是可以改变实参的值
最终输出结果是:
66,88 88,66 66,88
很显然实参的值还是没变,这是因为我们传进函数的是指针变量,也就是实参的地址,交换的也是地址,所以才不改变,但我们知道*p(p为指针变量)是引用p指向内存空间内的元素,所以要改变实参的值我们只需要在函数内用*p来表示即可。
地址传递可能会改变实参的值,这要看你怎么用了。
3.引用传递
又有一下程序
输出结果为:
66,88 88,66 88,66
在这里实参变了,为什么呢?其实很简单,在函数中的int &x并不是取x的地址,而是对输入的实参起一个别名,所以你进行操作的还是原来的实参。
结 论
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。