<pre name="code" class="cpp">#include <iostream> void swap0(int a,int b) { int temp; temp=a; a=b; b=temp; } void swap0(int &a,int &b) { int temp; temp=a; a=b; b=temp; } void swap2(int *a ,int *b) { int temp; temp=*a; *a=*b; *b=temp; } int main() { using namespace std; int s1,s2; cin>>s1; cin>>s2; swap0(s1,s2); cout<<s1<<" "; cout<<s2<<endl; swap2(&s1,&s2); cout<<s1<<" "; cout<<s2<<endl; swap1(s1,s2); cout<<s1<<" "; cout<<s2; return 0; }
程序输入 1 2
输出结果为 1 2
1 2
2 1
1 2
从程序的输出可以看出,swap0未实现交换两个数的值,而后面的swap1和swap2均实现了交换两个数的值。先分析按值传递和按引用传递如下:
按值传递时,因为a和b是S1和S2的两个副本,所以改变的是a和b的值,S1和S2的值并未发生交换,按引用传递时,a和b就是S1和S2,只是名称不同而已,所以交换a和b的值的时候也就交换了S1和S2的值。对于按指针传递的时候,a和b是S1和S2的地址,交换时就是交换*a和*b所指的值,所以交换也是成功的。