先上一个代码
package main
import "fmt"
func swap(a, b *int) {
a, b = b, a
}
func main() {
x, y := 1, 2
swap(&x, &y)
fmt.Println(x, y)
}
这个输出的结果为1,2。在swap()
中打印则会展示2, 1
如果换成下列代码
package main
import "fmt"
func swap(a, b *int) {
*a, *b = *b, *a
}
func main() {
x, y := 1, 2
swap(&x, &y)
fmt.Println(x, y)
}
这个输出的结果为2,1。
为什么会出现这种情况?
先看一下存储
当在swap
里面时只是更换了a,b的值也就是如下所示
然后再swap
结束时a,b被释放掉了而x,y不受影响如果使用*x, *y = *y, *x
则会直接修改x, y地址对应的值
所以会出现如上问题