Py小郑 2022-05-09 22:01 采纳率: 96.6%
浏览 36
已结题

c++有关swap函数不理解


#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++里面地址交换意味着内容交换了?

  • 写回答

2条回答 默认 最新

  • 昂格莱德 2022-05-09 22:32
    关注

    "在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打开门一看,这两人互相惊讶道: 哇!我们家装修互换了!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 创建了问题 5月9日

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题