大一新生发问:
这个程序中,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 delphi webbrowser组件网页下拉菜单自动选择问题
- ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
- ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
- ¥15 运动想象脑电信号数据集.vhdr
- ¥15 三因素重复测量数据R语句编写,不存在交互作用
- ¥15 微信会员卡等级和折扣规则
- ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
- ¥15 gdf格式的脑电数据如何处理matlab
- ¥20 重新写的代码替换了之后运行hbuliderx就这样了