1、例子1

1)var a int ,在内存中为a 开辟了一个空间,地址是 0x0843A040, 存放a 的值 1
2)调用方法changeValue ,声明了一个p,为p开辟一块内存,地址是 0x0843A06a ,初始存放的值是0,
然后把a的内容的值赋值给p (p = a ),故p的值为1,
p = 10 ,进行了重新赋值,故P最终的值为 10
3)由于对a的内存没有做任何的修改,故a的最终值为 1
image.png

2、例子2

1)var a int ,在内存中为a 开辟了一个空间,地址是 0x0843A040, 存放a 的值 1
2)调用方法changeValue ,声明了一个p,为p开辟一块内存,地址是 0x0843A06a ,初始存放的值是0,
然后把 a的地址值给了p (p = &a),故p的内存中存放的是 a 的内存地址 0x0843A040;
如果是 p = 10,则是把 0x0843A040 改成 10
如果是 *p = 10,则是把 指针指向的地址0x0843A040 的内存值 改成10
3)a 的内存值已被修改为10,故 a = 10
image.png

3、代码举例

  1. package main
  2. import "fmt"
  3. func main() {
  4. a := 10
  5. b := 20
  6. swap(a,b)
  7. fmt.Println("a=",a,"b=",b)
  8. c := 10
  9. d := 20
  10. pswap(&c,&d)
  11. fmt.Println("c=",c,"d=",d)
  12. //2级指针
  13. e := 1
  14. var p *int = &e
  15. fmt.Println("p=",p)
  16. var pp **int = &p
  17. fmt.Println("pp=",pp)
  18. }
  19. func swap(a int, b int) {
  20. var tmp int
  21. tmp = a
  22. a = b
  23. b = tmp
  24. }
  25. func pswap(pa *int, pb *int){
  26. var tmp int
  27. tmp = *pa
  28. *pa = *pb
  29. *pb = tmp
  30. }

结果:
image.png