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 的结果?