关于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

0
0

慕田峪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)
  }
}

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程