資料交換在c語言中十分常見。作為初學者首先學的應該都是如下方式:
int main()
這種交換如果放在乙個函式中沒錯,但如果將它們分別放在子函式和主函式中就會發生錯誤。
錯誤示例1:
void swap(int a,int b)
int main()
其結果是列印出來的a,b值並沒有交換。這是因為在子函式中定義的形參(a b)和主函式中的實參(a b)雖然函式名相同,但是其位址並不相同。導致的結果是子函式交換的是形參的數值,對主函式中實參的數值結果並不影響,所以輸出的結果沒有交換。
錯誤示例2:
void swap(int *p1,int *p2)
int main()
這個函式的輸出結果也是a,b值沒有交換。首先定義兩個整形指標*p1,*p2它們分別指向a,b(p1=&a ,p2=&b)。定義乙個整形指標*tmp。將變數p1的值賦給指標tmp(變數p1的值為a的位址,因為並沒有解引用),將變數p2的值賦給p1(p2的值為b的位址),再將變數tmp的值賦給p2。這樣操作下來實際只是將p1,p2儲存的位址交換,結果由原來p1=&a ,p2=&b變為現在p1=&b,p2=&a。所以a,b的值並沒有改變。
錯誤示例3:
void swap(int *p1,int *p2)
int main()
錯誤三中定義的整形指標*tmp未被初始化,形成了乙個野指標(也叫懸掛指標),你沒有訪問許可權的位址(指標),這個指標有可能不存在,也有可能存在但是你不能訪問。在出現野指標後,整個程式會崩潰,無法輸出你想要的結果。
正確示例:
#includevoid swap(int *p1,int *p2)
int main()
tmp = *p1;意思為將a的值賦給tmp,所以
void swap(int *p1,int *p2)
的本質是
int tmp = a;
a = b;
b = tmp;
只不過是通過指標的方式將主函式的資料修改為子函式的資料。換句話說:子函式的改變要想影響主函式的資料必須傳指標和解引用. 通過Swap函式交換兩個變數的值
正確 void swap int p1,int p2 定義乙個整形變數tmp,p1 a p2 b,首先在tmp裡存入a的值,然後將b的值賦給a,再將tmp裡的值賦給。這樣就完成了a與b兩個數的交換。我們經常會發現自己寫出的程式並不能達到我們的要求,在寫這類題的時候我們也可能寫過以下三種錯誤的編寫方式...
實現Swap函式,將兩個數交換
乙個人至少擁有乙個夢想,有乙個理由去堅強。心若沒有棲息的地方,到 都是在流浪 三毛 自信心深受打擊的我,只能來寫寫筆記了。剛剛對指標做了基礎的學習,那麼指標的作用在 呢,我們就用swap函式作一下分析。假如我們要交換a和b的值 void swap int a,int b 交換不成功 intmain ...
交換兩個變數的swap函式問題
常常看到這樣的一種寫法 void swap int a,int b 這是一種常用的很巧妙的交換的方法,但是如果用在陣列元素的交換,而a和b又指的是同乙個元素,就會出現問題了。例如 int a 10 swap a 2 a 2 這樣就會把a 2 變為零。今天是在自己練習寫乙個快速排序的程式的時候發現這個...