交換兩個變數的值的swap函式
阿新 • • 發佈:2019-01-07
比如說我們想交換變數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=5,j=3