为了账号安全,请及时绑定邮箱和手机立即绑定

关于形参和实参,改变实参问题

关于形参和实参,改变实参问题

慕勒3428872 2019-05-22 16:47:09
形参的改变无法影响到实参,是我开始以为的。后来发现用指针变量可以改变实参。#include#includevoidfun(int*a,int*b){int*c;c=a;a=b;b=c;}voidfun1(int*a,int*b){int*c;*c=*a;*a=*b;*b=*c;}intmain(){intx=3,y=5,*p=&x,*q=&y,*k=&x,*z=&y;fun(p,q);printf("%d,%d\n",*p,*q);fun1(k,z);printf("%d,%d\n",*k,*z);//fun(&x,&y);printf("%d,%d\n",*p,*q);return0;}这段代码输出3,53,3;首先我认为,在main()中,p,q获得了整形x,y的地址。进入fun()函数后,a,b,c交换的a,b的地址应该p,q的地址也要变化,因此我错误的认为输出5,3至于进入fun1()函数后,是指针变量的值互换应该不会改变我错误的认为应该输出3,5.请您帮我指导下,详细点。否则我可能不懂。谢谢您
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

intmain()
{
intx=3,y=5,*p=&x,*q=&y,*k=&x,*z=&y;
fun(p,q);
||
||________copyqtob____
||
|____copyptoa___|
||
voidfun(int*a,int*b)
{
int*c;
c=a;
a=b;
b=c;//actuallyaandbhasnorelationtopandq
}
fun1(k,z);
||
||________copyztob____
||
|____copyktoa___|
||
voidfun1(int*a,int*b)
{
int*c;
*c=*a;
*a=*b;
*b=*c;//aandbsameasfun
//but*aisreferencex,*bisreferencey
//swap*aand*balsoaffectedxandy
}
                            
查看完整回答
反对 回复 2019-05-22
  • 2 回答
  • 0 关注
  • 647 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信