法一 使用位运算
#define SWAP(a, b) { a = a ^ b; b = b ^ a; a = a ^ b;}
法二 使用算术运算,这种方法可能会产生数值溢出的问题
#define SWAP(a, b) { a = b - a; b = b - a; a = a + b;}
#define SWAP(a, b) { a = a + b; b = a - b; a = a - b;}
法三 创建中间变量
#define SWAP(a, b, temp) {temp = a; a = b; b = temp;}
一个完整的例子:
#include <stdio.h>
#define SWAP(a, b) { a = a ^ b; b = b ^ a; a = a ^ b;}
#define SWAP2(a, b) { a = b - a; b = b - a; a = a + b;}
#define SWAP3(a, b) { a = a + b; b = a - b; a = a - b;}
#define SWAP4(a, b, temp) {temp = a; a = b; b = temp;}
void display(int a, int b) {
printf("i = %d, j = %d\n", a, b);
}
int main() {
int i = 16, j = 32;
display(i, j);
SWAP(i, j);
display(i, j);
SWAP2(i, j);
display(i, j);
SWAP3(i, j);
display(i, j);
int temp = 0;
SWAP4(i, j, temp);
display(i, j);
return 0;
}
编译运行结果:
i = 16, j = 32
i = 32, j = 16
i = 16, j = 32
i = 32, j = 16
i = 16, j = 32
网友评论