大一新生发问:
这个程序中,a和b的值不是交换了嘛,为什么最后结果还是“5-6”?
3条回答 默认 最新
- 技术专家团-小桥流水 2021-12-01 09:04关注
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥15 平板录音机录音问题解决
- ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
- ¥15 (SQL语句|查询结果翻了4倍)
- ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
- ¥50 .net core 并发调用接口问题
- ¥15 网上各种方法试过了,pip还是无法使用
- ¥15 用verilog实现tanh函数和softplus函数
- ¥15 Hadoop集群部署启动Hadoop时碰到问题
- ¥15 求京东批量付款能替代天诚
- ¥15 slaris 系统断电后,重新开机后一直自动重启