理解值传递,地址传递和引用传递

VickyWu / 2024-10-08 / 原文

转载:https://blog.csdn.net/weixin_44309097/article/details/124086049#:~:text=在c++中,有三种主

值传递

传递的仅仅是值:

void swap(int x,int y){
  int tmp=x;
  x=y;
  y=tmp;
  cout<<x<<y<<endl;
}
int main(){
  int a=4,b=6;
  swap(a,b);
  cout<<a<<b<<endl;
}

此代码输出结果为6 44 6,实际上只是将a,b的值赋值给x和y,a,b的值其实并没有改变。

地址传递

传递的是地址:

void swap(int *x,int *y){
  int tmp=*x;
  *x=*y;
  *y=tmp;
  cout<<*x<<*y<<endl;
}
int main(){
  int a=4,b=6;
  swap(&a,&b);
  cout<<a<<b<<endl;
}

此代码输出6 46 4它将 a 的地址(&a)代入到 x,b 的地址(&b)代入到 y。同上面的值传递一样,函数调用时作了两个隐含的操作:将&a,&b的值赋值给了 x、y。指针 x、y的值已经分别是 a、b 变量的地址值了。接下来,对x、y 的操作当然也就是对 a、b 变量本身的操作了。所以函数里头的交换就是对 a、b 值的交换了,这就是所谓的地址传递

引用传递

void swap(int &x,int &y){
  int tmp=x;
  x=y;
  y=tmp;
  cout<<x<<y<<endl;
}
int main(){
  int a=4,b=6;
  swap(a,b);
  cout<<a<<b<<endl;
}

此代码输出6 46 4,x、y分别引用了 a、b变量。这样函数里头操作的其实就是实参 a、b 本身了,也就是说函数里是可以直接修改到 a、b 的值了。