Hanffffff 2021-12-01 08:49 采纳率: 50%
浏览 151
已结题

swap(int a, int b)函数

大一新生发问:
这个程序中,a和b的值不是交换了嘛,为什么最后结果还是“5-6”?

img

  • 写回答

3条回答 默认 最新

  • 关注

    void swap(int a,int b)函数中是传值,传值对main函数中的数据没有影响。
    在main函数中调用swap的时候,会发生一次拷贝操作,也就是让把5传递给swap的形参a,6传递给形参6
    所以在swap中操作的是两个新的临时变量a和b,而不是main函数中的a和b,只是swap中a的值等于main中变量a的值,swap中b的值等于main中变量b的值,但是,他们的地址时不一样的,swap中的a和b是编译器重新分配的两个地址。所以在swap中对a和b的操作对main中a和b的值没有影响。


    在C语言中,可以通过指针的方式实现交换,传递指针的话,操作的是指针指向的数据,虽然也会发生拷贝,但是他们指向同一块内存。C++同样适用。

    void swap(int *a,int *b)
    {
    int t;
    t = *a;
    *a = *b;
    *b = t;
    }
    
    

    在C++中引入了引用的概念,所以,也可以使用引用,如下:

    void swap(int &a,int &b) //&在这里是引用的意思
    {
    int t;
    t = a;
    a = b;
    b = t;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启