值的互换
#include<stdio.h>
void swap(int *x,int *y)
{
*x=*x^*y;
*y=*y^*x;
*x=*x^*y;
}
int main()
{
int a[2]={23,4};
swap(&a[0],&a[1]);
printf("%d %d\n",a[0],a[1]);
swap(&a[0],&a[0]);
printf("%d",a[0]);
getchar();
return 1;
}
这个程序的输出结果是
4 23
0
我就是没弄明白的是为什么swap(&a[0],&a[0]);这句代码执行后a[0]的值就变为了0;
[解决办法]
swap(&a[0],&a[0])函数内部:由于x与y地址相同,所以执行*x=*x^*y;后导致*x的值变为0,
之后再进行操作也都是0值的异或操作了,所以最后是0