我想在Golang中闡明這種行爲, 爲什麼當你在數組上使用內存引用,並且改變這個引用的值時,引用數組中沒有任何變化。Golang數組指針
一個例子:
var t [5]int
printType(t,"t")
p := &t
printType(p,"p")
x := *p
x[0] = 4
printType(x,"x")
printType(p,"p")
printType(t,"t")
此代碼返回
[t] Type:[5]int Kind:array Adr:%!p([5]int=[0 0 0 0 0]) Value:([0 0 0 0 0])
[p] Type:*[5]int Kind:ptr Adr:0xc4200142d0 Value:(&[0 0 0 0 0])
[x] Type:[5]int Kind:array Adr:%!p([5]int=[4 0 0 0 0]) Value:([4 0 0 0 0])
[p] Type:*[5]int Kind:ptr Adr:0xc4200142d0 Value:(&[0 0 0 0 0])
[t] Type:[5]int Kind:array Adr:%!p([5]int=[0 0 0 0 0]) Value:([0 0 0 0 0])
你可以看到內存地址是相同的,但值 「4」 是不存在的。
方法打印類型
func printType(i interface {},message string) {
k := reflect.TypeOf(i).Kind().String()
fmt.Printf("[%s] Type:%T Kind:%s Adr:%[2]p Value:(%[2]v)\n",message,i,k)
}