转载: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 4
和4 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 4
和6 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 4
和6 4
,x、y分别引用了 a、b变量。这样函数里头操作的其实就是实参 a、b 本身了,也就是说函数里是可以直接修改到 a、b 的值了。