猿问

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

形参的改变无法影响到实参,是我开始以为的。后来发现用指针变量可以改变实参。
#include
#include
voidfun(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.请您帮我指导下,详细点。否则我可能不懂。谢谢您
慕勒3428872
浏览 648回答 2
2回答

慕桂英3389331

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}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答