#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;
}