1 void swap1(int &a,int &b) 2 { 3 int x,y; 4 x=a;y=b; 5 x^=y^=x^=y; 6 a=x;b=y; 7 }
1 void swap2(int &a,int &b) 2 { 3 a^=b^=a^=b; 4 }
1 void swap3(int *a,int *b) 2 { 3 (*a)^=(*b)^=(*a)^=(*b); 4 }
swap1可以正常交换,swap2不可以,swap3也不可以。
而如果在main函数中直接写a^=b^=a^=b;也是可以的。
求解释?
三种方法都可以,把你调用 swap1,swap2,swap3的代码贴出来。
你是用VC调试的吗?
用CodeBlocks编译下就不可以。
调用方法没什么特别的。
@jpbirdy: 对,VC++。如果你没写错调用代码,那么这就是CodeBlocks的问题,你得问他们的技术支持去,因为这段代码是标准C++语法,CodeBlocks不管怎么编译它都应该支持,除非你的代码并不像看上去这么简单。
@程序猿.码农: 那就是VC++编译器的问题。因为CodeBlocks不自带编译器的,用的是标准GUN GCC的编译器,而VC++不是。不过理论上来说VC++执行的是正确的。我猜测,是这种连续赋值在和指针调用相关的时候,生成的中间变量有问题。谢谢你了~
传值问题。。。。后两个函数值的交换对main函数里的a和b没有影响吧
好吧。呵呵。