void Func(int *x,int *y) {*x^=*y; *y^=*x; *x^=*y; } 这个函数的功能是
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/16 15:52:48
void Func(int *x,int *y) {*x^=*y; *y^=*x; *x^=*y; } 这个函数的功能是什么?
不使用中间变量的两变量交换.
两变量交换通常用中间变量,伪代码写作:
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语言的函数参数只是值传递,你不用指针的话,值的改变反映不到实际变量上,换句话说,你在函数里边看变量的值是交换过来了,出了函数以后就又变回去了。关于这个问题请参考教科书,教科书对此有详细的解释。 所以你注意看,我特意指出是“伪代码”。
两变量交换通常用中间变量,伪代码写作:
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语言的函数参数只是值传递,你不用指针的话,值的改变反映不到实际变量上,换句话说,你在函数里边看变量的值是交换过来了,出了函数以后就又变回去了。关于这个问题请参考教科书,教科书对此有详细的解释。 所以你注意看,我特意指出是“伪代码”。
void Func(int *x,int *y) {*x^=*y; *y^=*x; *x^=*y; } 这个函数的功能是
void func(inta,int&b) { a++; b++; } 若执行代码段:int x=0,y=1; func
#includevoid f(int y,int *x){ y=y+*x; *x=*x+y;} void main(){
void f( int y,int *x) {y=y+*x; *x=*x+y;} main( ) { int x=2,y
# include void p(int *x,int y){ ++*x; y=y+2; } void main() {
int x=10,y=20; main() {func();printf("%d,%d\n",x,y);} func()
int func(int x,int y ) { return(x+y) } main() {int a=1,b=2,c
关于c++的问题,#include void gotoxy(int x,int y){COORD pos = {x,y}
这个程序语法的错误 #include void main(){int x ,y ;char x='A';int y='A
指针void f3(int *x,int *y) { int *t; t = x; x = y; y = t; 怎么理解
#include void f(int*x,int y) {*x=y+1;y=*x+2;} main() {int a=
void fun(int *x,int y)