简单的c语言指针问题

请问*pa=*pb和pa=pb的区别?为什么在用指针作为函数参数时,交换二者的值只能用*pa=*pb不能用后者?

假设 *pa指向a ,a的值是3, *pb指向b ,b的值是4,*pa=*pb结果是*pa指向a,a=4, *pb指向b ,b=4,将b的值给a了

pa=pb的结果是*pa指向b,*pb指向b,跟a和b的值没关系了

*pa = *pb的意思是将pb指针指向的地址的内容复制到pa指向的地址的内容,使得两个不同指针指向不同地址的内容是相同的

pa = pb的意思是将pa指针指向pb指针指向的地址,使得pa和pb成为相同的指针,指向同一个地址

*pa=*pb是将pb指针指向的变量的值赋给pa指向的变量

pa=pb是将pb的值赋给pa。

前者只是pb将其指向的变量的值给了pa,但是pa和pb指向的是两个地址,后者是直接把地址给了pa,pa=pb后,两者指向同一个地址。

在交换函数中,形参需要传址才能达到交换的效果,传值是达不到交换的效果的。你可以理解为:当传地址时,进入交换函数后,函数复制了一次参数,但是因为传进去的是地址,复制的话也是同一块内存,在函数中修改的是同一块内存。但是如果传值的话,就相当于重新拷贝了两个值,这两个值的位置就是系统随机分配的,在函数中再怎么交换,也不影响原来的内存,所以达不到交换的目的。

如有帮助,请采纳一下,谢谢。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632