最简单的交换两个变量值是用指针。
void swap(int *a, int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}//work
这里有个问题,一定要想清楚。为什么在函数体内不能交换指针了?
变成这样
void swap(int *a, int *b){
int *tmp;
tmp = a;
a = b;
b = tmp;
}//will not work
在swap函数里,a and b 都会产生一个copy来,那你tmp/a/b在这边进行替换,是在副本里替换了互相,但是出来的指针还是原先的。
那第一个swap为什么能够work???
因为在第一个swap里面,指针a和b也产生了一个副本,但是!!!!!!最重要的是,这两个副本都同时指向原本指针所指向的值!!!
这就是关键,副本指向的值正是我想转换的值,所以在副本指向的值进行交换,也达到了交换*a和*b的目的。这个一定要理解。。。
那另外有没有swap的实现版本??
void swap1(int &a, int &b){
int tmp;
tmp = a;
a = b;
b = tmp;
}
void swap2(int a, int b){
a = a^b;
b = b^a;
a = a^b;
}
swap1是用的&a,这个东西本来就是本体,谈不上副本。
swap2比较讨巧,在没有中间变量tmp的参与实现swap,技巧性高。