package main

import "fmt"

/*
swap(a, b *int) 这个函数可以把两个整数的值互换，但它需要这两个整数的“地址”（指针），这样它才能直接修改原始变量的值。
你可以想象x和y是两个盒子，分别装着42和99。swap函数要交换它们盒子里的东西，但只能拿到盒子的“门牌号”（地址），这样它才能真的改动盒子里的东西。
在swap函数里，先把a指向的数字（就是x的值）存进一个临时变量tmp。
然后把b指向的数字（y的值）放到a指向的地方（x的位置）。
最后把tmp（原来x的值）放到b指向的地方（y的位置）。至此，x和y的值就交换了。
main函数里，先打印交换前x和y的值，然后通过&x、&y把x和y的地址传给swap，交换成功后再打印一次，看到值已经互换。
*/

// 交换函数：传入两个int类型的指针参数
func swap(a, b *int) {
	// 用临时变量tmp先保存a指向的值
	tmp := *a // *a表示a指向的地址中存储的值
	*a = *b   // 把b指向的值赋给a指向的内存单元
	*b = tmp  // 把刚才保存的a的值赋给b指向的内存单元
}

func main() {
	x, y := 42, 99 // 定义两个整型变量x和y
	fmt.Printf("交换前 x=%d, y=%d\n", x, y)

	swap(&x, &y) // 传入变量x、y的地址，实现交换
	fmt.Printf("交换后 x=%d, y=%d\n", x, y)
}
