1、值传递
调用时,将实参的值传递对应的形参,即为值传递。
传递的是原始值的一个副本
由于形参有自己独立的存储空间,又作为函数的局部变量使用,因此在函数中对任何形参值得修改都不会改变实参变量的值。
2、引用传递
引用传递是一种特殊的变量,它被认为是一个变量的别名。当定义一个引用时,其实是为目标变量起一个别名,引用并不分配独立的内存空间,它与目标变量公用其内存空间。
使用引用参数可以直接操作实参变量,从而能够实现通过修改形参的值而达到修改对应实参值得目的。
例:
#include <iostream>
using namespace std;
void swap1(int x, int y) //定义形参
{
int tamp = x;
x = y;
y = tamp;
cout << "swap1 函数中x值为: " << x << " " << "swap1 函数中y值为: " << y;
}
void swap2(int &x, int &y)// 定义引用参数
{
int tamp = x;
x = y;
y = tamp;
cout << "swap1 函数中x值为: " << x << " " << "swap1 函数中y值为: " << y;
}
int main()
{
int a = 1, b = 2;
swap1(a, b);
cout << endl << a << " " << b << endl;
//输出后还是1,2
int c = 1,d = 2;
swap2(c,d);
cout << endl << c << " " << d << endl;
//输出后变成了2,1
return 0;
}
①对于swap1:
函数Swap1()被调用前,实参a和b有自己的存储空间,并且有自己的初始值。
当调用函数Swap()时,为形参(即函数的参数)x和y分配存储空间,并将a和b的值复制过来,
函数执行过程中,将x和y的值进行交换,当函数执行结束之后,x和y所占用的存储空间将被释放,
这种传递的方式,并不会对实参a和b的值产生影响,此即为值传递。
②对于swap2:
当函数未调用之c和d的值分别为1和2。
当函数调用过程中,形参的值被c=2,d=1;函数调用结束之后,实参的值被改变。
即函数调用时,作为形参的引用变量并不分配新的内存空间,它将作为实参变量的别名与其共用内存。