因为我学艺不精,所以有时候交换值函数时有时候会写成下面这样
int main(int argc, const char * argv[]) {
// insert code here...
int x = 3;
int y = 5;
Swap(&x,&y);
cout<<x<<endl;
cout<<y<<endl;
return 0;
}
void Swap(int *a,int *b){
int *temp;
temp = a;
a = b;
b = temp;
}
很明显,这样的结果肯定是错的,因为a和b只是形参,交换两个地址对主函数的x和y并没有什么作用,甚至连x和y的地址都不会改变。如果一定要用指针作为参数,可以像下面这样,交换a和b指向的值,可是这样和不用指针也没啥区别了。
void Swap(int *a,int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
而C++里面有个概念叫引用变量,也就是为原变量起一个别名,使用情况像下面这样
int main(int argc, const char * argv[]) {
// insert code here...
int x = 3;
int y = 5;
swap(x, y);
cout<<x<<endl;
cout<<y<<endl;
return 0;
}
void swap(int &x,int &y){
int temp;
temp = x;
x = y;
y = temp;
}
这样就能够成功交换x和y的值。
为什么会有不同的效果呢,按照我个人的理解是,上面的局部变量a和b只是相当于新建一个指向x和y的指针,只是交换a和b指针地址的值并不能改变x和y的地址的指向,所以x和y的值还是没有改变。
而采用引用的话,实际上就是创建一个指针指向主题函数中的x和y,然后在操作的就是这个指针指向的值。这样才能改变主体函数中x和y的值。
以上仅仅是个人的理解,方便自己理解代码,也有可能实际并不是我想的这样,仅供参考!