關于兩個數交換
下面5個函數,哪個能成功交換兩個數?
第一個函數
void swap1(int p, int q) {
int
很明顯不能交換兩個數。盡管局部變量被交換了,但是随着局部變量生命周期的結束,不會影響主函數的a,b值。
第二個函數
void swap2(int *p, int *q) {
int *temp;
*temp = *p;
*p = *q;
*q = *temp;
}
不能交換,注意int *temp;建立了一個指針,但是沒有給指針配置設定記憶體,也就是說指針現沒有指向實際的位址。*temp = *p;是把*p指向記憶體裡的值賦給*temp指向的記憶體中,這塊記憶體由于是随機配置設定的,在函數結束後不會收回,容易造成記憶體洩漏。在有的編譯器中,代碼會報錯。
比如,我在DevC++中測試就報錯了。
第三個函數
void swap3(int *p, int *q) {
int *temp;
temp = p;
p = q;
q
這裡的int *temp;也存在記憶體洩漏的問題。這個函數實作的功能是,局部變量指針的交換。在函數結束後,主函數的指針依舊指向原來的位址,是以不能實作交換。
第四個函數
void swap4(int *p, int *q) {
int temp;
temp = *p;
*p = *q;
*q
第五個函數
void swap5(int &p, int &q) {
int