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 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊