pointers.go 1.3 KB

12345678910111213141516171819202122232425262728
  1. package main
  2. import "fmt"
  3. /*
  4. swap(a, b *int) 这个函数可以把两个整数的值互换,但它需要这两个整数的“地址”(指针),这样它才能直接修改原始变量的值。
  5. 你可以想象x和y是两个盒子,分别装着42和99。swap函数要交换它们盒子里的东西,但只能拿到盒子的“门牌号”(地址),这样它才能真的改动盒子里的东西。
  6. 在swap函数里,先把a指向的数字(就是x的值)存进一个临时变量tmp。
  7. 然后把b指向的数字(y的值)放到a指向的地方(x的位置)。
  8. 最后把tmp(原来x的值)放到b指向的地方(y的位置)。至此,x和y的值就交换了。
  9. main函数里,先打印交换前x和y的值,然后通过&x、&y把x和y的地址传给swap,交换成功后再打印一次,看到值已经互换。
  10. */
  11. // 交换函数:传入两个int类型的指针参数
  12. func swap(a, b *int) {
  13. // 用临时变量tmp先保存a指向的值
  14. tmp := *a // *a表示a指向的地址中存储的值
  15. *a = *b // 把b指向的值赋给a指向的内存单元
  16. *b = tmp // 把刚才保存的a的值赋给b指向的内存单元
  17. }
  18. func main() {
  19. x, y := 42, 99 // 定义两个整型变量x和y
  20. fmt.Printf("交换前 x=%d, y=%d\n", x, y)
  21. swap(&x, &y) // 传入变量x、y的地址,实现交换
  22. fmt.Printf("交换后 x=%d, y=%d\n", x, y)
  23. }