c++中值传递和引用传递的相同点

2025-03-07 16:48:47
推荐回答(2个)
回答1:

用一个经典的例子说明一下:


  1. 值传递

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参数都是原参数的副本,操作也是在副本上进行的,随着被调函数结束,副本也就消失了,因此对原参数没有影响。

而引用传递就不同,主函数没有为被调函数的引用传递参数复制副本,因此所有操作都是基于原来的参数,因此在被调函数内对参数进行的操作就是对原参数进行的操作,于是参数被改变了。


这里我们可以发现,值传递需要复制参数,构造参数的副本,因此比较花时间,引用传递则不会。因此在保证参数不会被改变的情况下,我们喜欢用引用传递提高时间性能。

回答2:

你说的是值传递 是传地址的意思吗?