关于map的问题
来源:3-4 Map

慕雪5183996
2019-10-06
老师,你好,我在网上看到一个题目,
type student struct {
name string
age int
}
type teststrst struct {
age int
sex string
}
func main() {
m := make(map[string]*student)
stus := []student{
{name:"小王子",age:18},
{name:"娜扎",age:23},
{name:"大王八",age:9000},
}
fmt.Printf("%p\n",stus)
for _,stu := range stus{
fmt.Printf("%p\n",&stu)
m[stu.name] = &stu
}
for k,v := range m{
fmt.Println(k,"=>",v.name)
}
}
输出结果:
小王子 => 大王八
娜扎 => 大王八
大王八 => 大王八
输出结果和自己想的不一样,但又找不到问题所在,为什么会在range stus的时候,stu的地址值会不变的呢?
写回答
2回答
-
ZoneTw
2020-03-19
怪了, 我看沒問題阿:
娜扎 => 娜扎
大王八 => 大王八
小王子 => 小王子https://play.golang.org/p/isdJRCMyp7e
00 -
慕田峪8488421
2019-10-20
遍历的时候遍历的是指针,指针不会因为遍历而改变,需要遍历时获取值才行
type student struct {
name string
age int
}
type teststrst struct {
age int
sex string
}
func main() {
m := make(map[string]*student)
stus := []student{
{name:"小王子",age:18},
{name:"娜扎",age:23},
{name:"大王八",age:9000},
}
fmt.Printf("%p\n",stus)
for k,_ := range stus{
fmt.Println(k)
m[stus[k].name] = &stus[k]
}
for k,v := range m{
fmt.Println(k,"=>",v.name)
}
}00
相似问题