形参的改变无法影响到实参,是我开始以为的。后来发现用指针变量可以改变实参。#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}
添加回答
举报
0/150
提交
取消