直接上代码
#include <iostream> using namespace std; void swap(int *a,int *b) { *a ^= *b ^= *a ^= *b; } void swap1(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } void swap2(int *a,int *b) { *a+=*b; *b=*a-*b; *a=*a-*b; } int main() { int a=1,b=2; int *m=&a; int *n=&b; swap2(m,n); cout << a << endl; cout << b << endl; return 0; }
swap1版本是我们常用的方法,在VC下编译运行正常,g++下也ok~~~
swap2版本不需要中间变量,但是可能会溢出-你懂的~~~
swap版本比较巧妙,经过三次异或完成交换,逻辑上没有问题,在VC下也编译运行正常,但是g++之后结果出错~~~
大家可以试试~~~
啥原因呢?
答:编译器的原因~~~具体未知~~~求解答~~~
ps:看来确实是全球变暖了~~~:)