c语言大一学生对指针的用法不理解

img

img


为什么这两个结果会不同,为什么没用指针的就不会交换

你第一个代码是传值,
传值时,通过调用swap()无法改变主函数中a,b的值,因为传给swap()的a,b参数实际上是主函数中a,b变量的一份拷贝,
swap()的a,b参数和主函数中a,b的地址并不一样,交换的只是swap()的a,b参数的值,当调用完swap后,swap()的a,b参数所占的内存空间会被释放,所以主函数中a,b的值并没有被改变。

你第二个代码是用指针传址,
传址时,通过调用swap()可以改变主函数中a,b的值,因为此时传递的是a,b的地址,在swap()中改变*a,*b的值就相当于在改变主函数中a,b的值,因为他们的地址是一样的,即使调用完swap后,它所占的内存空间会被释放,但主函数中a,b的值已被改变。

对于你这个问题可以参考如下链接:

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

传递值和地址的区别。只传递值,函数内部的操作影响不了外部的变量,也就是说内部的a和外部的a拥有不同的地址。传递地址则是函数内部通过访问地址更新变量,此时外部相应的变量也会改变,因为地址是同一个地址。