package main

import "fmt"

func main()  {
    a := [...]int{0,0,0}
    update1(a)
    fmt.Println(a)
    update2(&a)
    fmt.Println(a)
    update3(&a)
    fmt.Println(a)
    update4(&a)
    fmt.Println(a)
}

func update1(a [3]int) {
    a[1] = 1
}
func update2(p *[3]int) {
    a := *p
    a[1] = 2
}
func update3(p *[3]int) {
    (*p)[1] = 3
}
func update4(p *[3]int) {
    p[1] = 4
}

输出:

[0 0 0]
[0 0 0]
[0 3 0]
[0 4 0]
  • update1 可以理解,相当于复制了一个数组,改变复制的数组不会对原有数组有影响
  • update2 如何理解,预期应该和 update3 一样才对?
  • update3 也能理解,传递数组的指针相当于指向同一块内存区域,改变它的值会影响原来的数组
  • update4 是相当于 update3 的语法糖?

主要是不知道如何理解 update2 的结果?