最簡單的交換兩個變數值是用指標。
void swap(int *a, int *b)//work
這裡有個問題,一定要想清楚。為什麼在函式體內不能交換指標了?
變成這樣
void swap(int *a, int *b)//will not work
在swap函式裡,a and b 都會產生乙個copy來,那你tmp/a/b在這邊進行替換,是在副本裡替換了互相,但是出來的指標還是原先的。
那第乙個swap為什麼能夠work???
因為在第乙個swap裡面,指標a和b也產生了乙個副本,但是!!!!!!最重要的是,這兩個副本都同時指向原本指標所指向的值!!!
這就是關鍵,副本指向的值正是我想轉換的值,所以在副本指向的值進行交換,也達到了交換*a和*b的目的。這個一定要理解。。。
那另外有沒有swap的實現版本??
void swap1(int &a, int &b)
void swap2(int a, int b)
swap1是用的&a,這個東西本來就是本體,談不上副本。
swap2比較討巧,在沒有中間變數tmp的參與實現swap,技巧性高。
交換兩個變數的swap函式問題
常常看到這樣的一種寫法 void swap int a,int b 這是一種常用的很巧妙的交換的方法,但是如果用在陣列元素的交換,而a和b又指的是同乙個元素,就會出現問題了。例如 int a 10 swap a 2 a 2 這樣就會把a 2 變為零。今天是在自己練習寫乙個快速排序的程式的時候發現這個...
通過Swap函式交換兩個變數的值
正確 void swap int p1,int p2 定義乙個整形變數tmp,p1 a p2 b,首先在tmp裡存入a的值,然後將b的值賦給a,再將tmp裡的值賦給。這樣就完成了a與b兩個數的交換。我們經常會發現自己寫出的程式並不能達到我們的要求,在寫這類題的時候我們也可能寫過以下三種錯誤的編寫方式...
交換兩個變數
目的 實現兩個變數值的交換 以int 型別為例 方法一 使用臨時變數。優點 安全,適合任何型別資料交換,無溢位風險。缺點 保守 效率不高,需要使用第三方臨時變數 棧空間 1 void swap value int var1,int var2 2 方法二 利用 算術運算實現。優點 不需要額外的臨時變數...