正確**:
void
swap
(int *p1,int *p2)
定義乙個整形變數tmp,p1=&a ,p2=&b,首先在tmp裡存入a的值,然後將b的值賦給a,再將tmp裡的值賦給。這樣就完成了a與b兩個數的交換。
我們經常會發現自己寫出的程式並不能達到我們的要求,在寫這類題的時候我們也可能寫過以下三種錯誤的編寫方式,讓我們來分析一下。
錯誤一:
void
swap1
(int a,int b)
int main()
錯誤一中錯誤理解swap函式與主函式中的引數,swap函式中的引數為形參,而主函式中的引數為實參,兩者並不是同一型別的引數,所以在swap函式中交換兩個形參的值並不會影響主函式中實參的值,因為此時,兩個函式中的a與b所處的位址不同,改變乙個函式中的值,對另乙個函式中的值並不會產生影響。
錯誤二:
void
swap2
(int *p1,int *p2)
錯誤二中定義乙個整形指標來存放p1,然後交換p1與p2的值,再將tmp的值賦給p2。但請注意,我們這裡定義的是整形指標p1與p2,他們分別指向a與b,(p1=&a ,p2=&b),在當p1與p2的值交換之後,p1改變為指向b,p2改變為指向a(p1=&b ,p2=&a),但這時a與b的值並沒有發生變化,僅修改了指標。
錯誤三:
void
swap3
(int *p1,int *p2)
錯誤三中定義的整形指標*tmp未被初始化,形成了乙個野指標(也叫懸掛指標),你沒有訪問許可權的位址(指標),這個指標有可能不存在,也有可能存在但是你不能訪問。在出現野指標後,整個程式會崩潰,無法輸出你想要的結果。 swap交換兩個變數
最簡單的交換兩個變數值是用指標。void swap int a,int b work 這裡有個問題,一定要想清楚。為什麼在函式體內不能交換指標了?變成這樣 void swap int a,int b will not work在swap函式裡,a and b 都會產生乙個copy來,那你tmp a ...
交換兩個變數的swap函式問題
常常看到這樣的一種寫法 void swap int a,int b 這是一種常用的很巧妙的交換的方法,但是如果用在陣列元素的交換,而a和b又指的是同乙個元素,就會出現問題了。例如 int a 10 swap a 2 a 2 這樣就會把a 2 變為零。今天是在自己練習寫乙個快速排序的程式的時候發現這個...
關於如何通過Swap函式交換兩個變數的值
資料交換在c語言中十分常見。作為初學者首先學的應該都是如下方式 int main 這種交換如果放在乙個函式中沒錯,但如果將它們分別放在子函式和主函式中就會發生錯誤。錯誤示例1 void swap int a,int b int main 其結果是列印出來的a,b值並沒有交換。這是因為在子函式中定義的...