永发信息网

# include <iostream.h> void swap(int a,int b) { temp=a; a=b; b=temp; } int main() { int i=3,j=

答案:5  悬赏:70  手机版
解决时间 2021-04-08 23:40
# include <iostream.h> void swap(int a,int b) { temp=a; a=b; b=temp; } int main() { int i=3,j=5;
最佳答案
这个是C语言教材里讲指针基本会遇到的问题,是因为调用swap(i,j)将i和j的值交给了swap的局部变量a和b,交换的只是a和b的值。i和j不会变的。
举个例子你就明白了。你和同学一起做一张卷子,他让你给他抄下,你把卷子给了他,相当于你传值给函数,你同学拿去后自己抄下来到他的卷子上,他对他的卷子做任何修改都不会改变你自己的卷子。
如果用指针或者引用就不一样,你是直接把卷子给你同学,他直接在你卷子上面改,他改了当然就影响到你原来的样子了。差不多是这个道理。追问你的意思是 i和j是我的卷子,a和b是同学的卷子如果程序要求输出a和b,那么输出的值就是a=5,b=3,是这个意思么?追答你的意思理解对了。但是有一点要说明的是:如果你在main主函数里面输出a和b的话是不行的,因为这是swap函数的局部变量,swap函数调用完毕a和b就消失了。要输出除非在swap函数里输出。
如果你要达到预期交换的目的,并且在主函数里面输出交换后的值的话,就不要传值,而是传指针或者用引用。
全部回答
swap(i,j);的作用是交换i,j的值
轩辕O之风的解释很形象,用个用指针才能真正交换值。
swap函数的参数是值形参,执行swap(i,j)之后是把i赋值给a,j赋值给b,过后i,j与a、b就没有任何关系了,所以swap函数体执行的只是a与b的值的调换,并没有i与j值调换的效果。要想实现i与j调换,就要使用引用形参,即void swap(int&a,int&b),使用引用形参的效果是a是i的另一个名字,b是j的另一个名字,也就是说a就是i,b就是j!
传值了。main()中的i和j不会受到影响,因为你传给swap()的是i和j的副本,而不是它们本身。
可以修改为
swap(&i, &j)这样就可以按照传地址方式使用了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
每天早晨4点多钟饿的出虚汗
配不上别人的诗句,显示一个人配不上另一个人
龙腾社区南门这个地址在什么地方,我要处理点
单选题2005年7月26日,朝核问题第四次六方会
从北京到唐山古冶坐什么车?要长途汽车的具体
黄果树瀑布 是谁写的?
太阳穴长痘痘几天然后开始头疼是什么原因
寻电视剧,老上海的片子了,女主叫楚楚(后来
STEM CELL是什么?
Nowhere else your fortune&
创文明标语小学生,学校行为规范的标语
长途汽车上车时要不要身份证
360卫士蓝光开了之后玩其他的又没了
用元素符号、化学式或化学方程式填空:(1)
表现春天景色的诗句,春天到了,公园里满眼都
推荐资讯
室内装修隔音板多少钱一平米
纸尿裤放孕婴店给百分之几的提成?
支付宝突然出现无可用付款方式
多肉植物长徒了怎么办,多肉上面枯萎怎么办
炖品是早上还是晚上还是空腹吃比较好?
赤峰市本着“统一策划、内外结合、广泛宣传、
单选题某双链DNA分子中,鸟嘌呤占碱基总数的3
一块废旧手机电池可以使800吨水受污染,2500
关于迷失方向的句子,XP会不会比98更加充分的
比熊犬和泰迪犬相比哪种更适合家养
农行超级网银交易转过来的钱可以用吗?
幼师转行能干什么啊??
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?