- 1 值传递:
#include<iostream> using namespace std; int main(){ void change(int ,int); int x=2,y=3; cout<<"交换前:x="<<x<<" y="<<y<<endl; change(x,y); cout<<"交换后:x="<<x<<" y="<<y<<endl; return 0; } void change(int x,int y){ int temp; temp=x; x=y;y=temp; cout<<"函数内:x="<<x<<" y="<<y<<endl; }
这种方式并不能改变 x,y的值,因为在函数交换后实参的值是没有变的。只是在函数内部改变了x,y的值。
- 指针传递
#include<iostream> using namespace std; int main(){ void change(int * ,int *); int x=2,y=3; cout<<"交换前:x="<<x<<" y="<<y<<endl; change(&x,&y); cout<<"交换后:x="<<x<<" y="<<y<<endl; return 0; } void change(int *x,int *y){ int temp; temp=*x; *x=*y; *y=temp; }
指针传递交换的是实参的地址(传给给形参的是地址),所以最后x,y的值改变了
3引用传递
#include<iostream> using namespace std; int main(){ void change(int & ,int &); int x=2,y=3; cout<<"实参x的地址是:"<<&x<<endl; cout<<"交换前:x="<<x<<" y="<<y<<endl; change(x,y); cout<<"交换后:x="<<x<<" y="<<y<<endl; return 0; } void change(int &x,int &y){ int temp; temp=x; x=y; y=temp; cout<<"形参x的地址是:"<<&x<<endl; }
引用 &x,相当于给x去了一个别名,形参x和实参x=2 在内存中地址是相同。
综上,三种交换方式中间接引用的方式都能交换想x,y的值。