交換兩個變數值是程式設計入門的經典問題。C 語言提供多種實作方式,各有優缺點。
int a = 10, b = 20, temp;
temp = a;
a = b;
b = temp;
封裝為函數時需傳址:
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
a = a ^ b;
b = a ^ b; // 此時 b = a
a = a ^ b; // 此時 a = 原 b
優點:不佔額外記憶體。缺點:現代編譯器優化下效能不一定更好;若 a 與 b 指向同一記憶體位址會歸零。
a = a + b;
b = a - b;
a = a - b;
缺點:整數相加可能溢位導致未定義行為,不推薦用於生產環境。
stdlib.h 的 swap 巨集(C11 _Generic)C11 可利用 _Generic 實作型別通用的 swap 巨集,但較少見。
std::swap(C++ 專用,支援移動語意)#include <utility>
std::swap(a, b);
xchg 指令)。