package main
const N = 3
func main() {
m := make(map[int]*int)
for i := 0; i < N; i++ {
m[i] = &i //A
}
for _, v := range m {
print(*v)
}
}
结果是
333
原因是
- 循环的 k,v 的地址在循环的时候是不变的
- 循环内声明的变量,每次都是不一样的
- 存 k 和 v 的地址并不会计算出来然后存起来,而是存的「k 和 v 的地址」这个概念,所以最后所有的值指向的都是最后一次循环的地址
所以重点就是 i 每次都是那个 i,p 每次都不是那个 p(作用域知识)
所以需要在循环内部申请局部变量存 i,然后把他的地址赋给 map
package main
const N = 3
func main() {
m := make(map[int]*int)
for i := 0; i < N; i++ {
p := i
m[i] = &p //A
}
for _, v := range m {
print(*v)
}
}