#include <stdio.h> /* 使用宏来完成两个同类型变量的交换 */ #define swap(t,a,b) / {/ *(t *)a = *(t *)a^*(t *)b;/ *(t *)b = *(t *)a^*(t *)b;/ *(t *)a = *(t *)a^*(t *)b;/ } void swap1(int *a, int *b) { *a = *a^*b; *b = *a^*b; *a = *a^*b; } void swap2(void *a, void *b) { *(int *)a = *(int *)a^*(int *)b; *(int *)b = *(int *)a^*(int *)b; *(int *)a = *(int *)a^*(int *)b; } int main() { int a = 30, b = 4000; char *str1 = "abc"; char *str2 = "def"; printf("a = %d/nb = %d/n", a, b); /*swap1(&a, &b);*//* this is also ok to swap two integer number*/ /*swap2((void *)&a, (void *)&b);*/ swap(int, &a, &b);/* works well */ printf("a = %d/nb = %d/n", a, b); printf("str1 = %s, str2 = %s/n", str1, str2); swap(char , &str1, &str2); printf("str1 = %s, str2 = %s/n", str1, str2); return 0; }