package main
import (
"fmt"
)
type student struct {
Name string
Age int
}
func main() {
m := pase_map()
for k, v := range m {
fmt.Printf("key = %s,value =%v\n", k, v)
}
}
func pase_map() map[string]*student {
m := make(map[string]*student)
stu := []student{{"joy", 12}, {"lei", 14}}
for _, v := range stu {
/*坑1*/
m[v.Name] = &v
/*正解1,将索引加上*/
//m[v.Name]=&stu[index]
/*正解2,赋值给新变量,再取地址*/
//v1 := v
//m[v.Name] = &v1
}
return m
}
v 是一个拷贝,所有的 v 都指向一个地址,循环结束时才将最后一个的地址修改导致所有的都是一样,不知这样的理解对不对,求正解
在“range”语句中生成的数据的值是真实集合元素的拷贝。它们不是原有元素的引用。
这意味着更新这些值将不会修改原来的数据。同时也意味着使用这些值的地址将不会得到原有数据的指针。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于