每日一题(2)
# 下面这段代码输出的内容
func main() {
slice := []int{0,1,2,3}
m := make(map[int]*int)
for key,val := range slice {
m[key] = &val
}
for k,v := range m {
fmt.Println(k,"->",*v)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 答案
0 -> 3
1 -> 3
2 -> 3
3 -> 3
1
2
3
4
2
3
4
# 解析
for range 循环的时候会创建每个元素的副本,而不是元素的引用,所以m[key]=&val取得都是变量val的地址,所以最后map中的所有元素的值都是变量val的地址,因为最后val被赋值为3,所以最后输出都是3
1
上次更新: 2022/07/13