用一个经典的例子说明一下:
值传递
void swap(int a,int b)
{
int x = a;
a = b;
b = x;
}
void main()
{
int a = 10;
int b = 20;
swap(a,b);
cout< }
这里输出是 10 20;
说明a和b根本没有发生交换;
2.引用传递
void swap(int &a,int &b)
{
int x = a;
a = b;
b = x;
}
void main()
{
int a = 10;
int b = 20;
swap(a,b);
cout< }
这里输出就是 20 10
可以发现 a,b发生了交换
在值传递的情况下,函数在被调用时,他的值传递参数都会被复制一份,也就是说被调用函数函数体中所使用的参数是被复制的参数,当调用结束时也就消失了,比如第一个例子中,swap函数中执行的a和b参数都是原参数的副本,操作也是在副本上进行的,随着被调函数结束,副本也就消失了,因此对原参数没有影响。
而引用传递就不同,主函数没有为被调函数的引用传递参数复制副本,因此所有操作都是基于原来的参数,因此在被调函数内对参数进行的操作就是对原参数进行的操作,于是参数被改变了。
这里我们可以发现,值传递需要复制参数,构造参数的副本,因此比较花时间,引用传递则不会。因此在保证参数不会被改变的情况下,我们喜欢用引用传递提高时间性能。
你说的是值传递 是传地址的意思吗?