转自:https://www.cnblogs.com/tanjuntao/p/8678927.html
一、值传递
这种传递方式中,实参和形参是两个不同的地址空间,参数传递的实质是将原函数中变量的值,复制到被调用函数形参所在的存储空间中,这个形参的地址空间在函数执行完毕后,会被回收掉。整个被调用函数对形参的操作,只影响形参对应的地址空间,不影响原来函数中的变量的值,因为这两个不是同一个存储空间。
二、引用传递
这种传递方式中,形参是引用类型变量,其实是实参的一个别名,在被调用函数中,对引用变量的所有操作等价于对实参的操作。整个被调用函数对形参的操作执行完毕后,原先的实参的值也会发生改变。
三、指针传递
这种传递方式中,实参是变量的地址{swap(&a,&b);},形参是指针类型的变量。在函数中对指针变量的操作,就是对实参(变量地址)所对应的变量的操作。整个被调用函数对形参的操作执行完毕后,原函数中的变量的值将会发生改变。
代码如下:
#include<iostream>
using namespace std;
//值传递 交换前a=1,b=2;交换后a=1,b=2;
void swap(int a,int b){
int temp=a;
a=b;
b=temp;
}
//引用传递 交换前a=1,b=2;交换后a=2,b=1;
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
//指针传递 交换前a=1,b=2;交换后a=2,b=1;
void swap1(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
//主函数
int main(){
int a=1;
int b=2;
cout<<"交换前"<<endl;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
swap(a,b);//值传递和引用传递
swap1(&a,&b);//指针传递
cout<<"交换后"<<endl;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}