通過Swap函式交換兩個變數的值

2021-10-24 17:15:23 字數 1204 閱讀 4773

正確**:

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值並沒有交換。這是因為在子函式中定義的...