#include <iostream>
using namespace std;
void swap(int *x,int *y)
{
int t = *x;
*x = *y;
*y = t;
}
int main()
{
int x = 1,y = 2;
swap(&x,&y);
cout<<x<<endl<<y;
return 0;
}
这里传入两个·数字的地址,并把他们的地址交换,然后我输出,发现他们的值也交换了
那是不是说明 在C++里面地址交换意味着内容交换了?
"在c++里面地址交换意味着内容交换" 这样的说法是错误的。
这里不存在交换地址的说法,在函数swap的调用中,main函数里面的局部变量x、y的地址分别拷贝给swap的形参x和y,此时两套xy都指向同一个空间。
举个例子:我给了你我家的门钥匙,你就可以去我家住,也可以用里面的东西,但房子只有一个。
int t = *x;可以理解为去x家,把他家的装修看一遍,然后一模一样地来装修t这个房子
*x = *y;可以理解为把x家的装修改成y家的样子
*y = t; 可以理解为再把y家的装修改成家的样子
这样一来,是不是现在的y家是以前x家的装修,而x家是以前y家的装修,已经互换了。swap函数返回了,swap的xy是时候还钥匙了。
经过swap这流程装修完毕后,main里的x,y打开门一看,这两人互相惊讶道: 哇!我们家装修互换了!
不看对应汇编指令,就是“隔靴搔痒”