1. 程式人生 > >交換兩個變數的值的swap函式

交換兩個變數的值的swap函式

比如說我們想交換變數i和j的值,寫出下列程式碼:

#include<iostream>
using namespace std;
void swap(int a,int b){
temp=a;
a=b;
b=temp;
}
int main(){
int i=3,j=5;
swap(i,j);
cout<<i<<","<<j<<endl;
return 0;
}

期待輸出的結果是:

5,3

然而,實際輸出結果是:

3,5

在上述程式碼中,swap函式的確實現了兩個變數的交換,不過只是a,b的值交換了,而i,j的值沒有互換。

這是因為對函式的引數傳遞認識不夠深刻,在上述的swap函式中,函式的引數分別為a,b,當我們呼叫這個函式時,swap(i,j)表示的意義是變數的值傳遞,即

a=i;
b=j;

實際上是將i和j的值分別賦值給a和b,然後再用a和b進行下面的操作,而i,j的值不受影響

正確的做法是傳遞變數的地址,方法有兩種:傳遞變數的指標傳遞變數的別名

(1)傳遞變數的指標

#include<iostream>
using namespace std;
void swap(int *a,int *b){
temp=*a;
*a=*b;
*b=temp;
}
int main(){
int
i=3,j=5; swap(&i,&j); cout<<"i="<<i<<",""j="<j<<endl; return 0; }

呼叫函式時實現的操作為:

*a=&i;
*b=&j;

(2)傳遞變數的別名

#include<iostream>
using namespace std;
void swap(int &a,int &b){
temp=a;
a=b;
b=temp;
}
int main(){
int i=3,j=5;
swap(i,j);
cout<<"i="
<<i<<","<<"j="<<j<<endl; return 0; }

呼叫函式時實現的操作為:

&a=i;
&b=j;

上述兩種方法實際輸出結果是:

i=5j=3