试想这个程序的输出会是什么呢?
package main
import "fmt"
func main(){
slice := []int{0,1,2,3}
m := make(map[int]*int)
for key,val := range slice{
m[key] = &val
}
fmt.Println(*m[2])
}
输出是3,嘿嘿,这是怎么回事
其实是这样的,val变量在整个循环过程都是一个块固定的内存,地址是没有改动的.range只是将slice的值取出来放在这块内存中,因为这块内存在最后一次循环过程中被放进了3,所以结果是3.如果我们输出这个m的每个值,会发现这些值都是相同的一个地址