int t = a; a = b; b = t;
// 或封裝為函數
void swap(int *a, int *b) { int t=*a; *a=*b; *b=t; }
a ^= b; b ^= a; a ^= b;
// 原理:x^x=0, x^0=x, 滿足交換律結合律
注意:a 和 b 不能指向同一內存,否則歸零。
a = a + b; b = a - b; a = a - b;
風險:a+b 可能溢出導致未定義行為,**不推薦生產使用**。
// C++
void swap(int &a, int &b) { int t=a; a=b; b=t; }
// C11 _Generic 實現類型泛型 swap 宏
| 方法 | 優點 | 缺點 | 推薦場景 |
|---|---|---|---|
| 臨時變量 | 安全、通用、可讀 | 額外 4/8 字節 | 所有場景首選 |
| 異或 | 無額外內存 | 同地址歸零、僅整數 | 嵌入式極度受限、面試 |
| 加減 | 無額外內存 | 溢出風險、浮點誤差 | 教學演示,禁用生產 |