void Func(int *x,int *y) {*x^=*y; *y^=*x; *x^=*y; } 这个函数的功能是

问题描述:

void Func(int *x,int *y) {*x^=*y; *y^=*x; *x^=*y; } 这个函数的功能是什么?
1个回答 分类:综合 2014-11-02

问题解答:

我来补答
不使用中间变量的两变量交换.
两变量交换通常用中间变量,伪代码写作:
swap(x, y)
{
x = t;
x = y;
y = t;
}
我们可以通过三次异或运算完成变量的交换,而不使用中间变量,即:
x = x xor y;
y = y xor x;
x = x xor y;
xor运算满足交换律和结合律,上面的步骤可写为下面的等式
y' = y xor (x xor y) = y xor y xor x = 0 xor x = x
x' = (x xor y) xor (y xor (x xor y)) = x xor y xor x = 0 xor y = y
经过运算后y'(y的新值)是x,x'是y,完成了交换
再问: 但是里面他为什么用指针类型啊,如果把全部的“*”去掉可以吗? 即*x换成x,*y换成y。
再答: 必须不行啊。C语言的函数参数只是值传递,你不用指针的话,值的改变反映不到实际变量上,换句话说,你在函数里边看变量的值是交换过来了,出了函数以后就又变回去了。关于这个问题请参考教科书,教科书对此有详细的解释。 所以你注意看,我特意指出是“伪代码”。
 
 
展开全文阅读
剩余:2000