迹忆客 计算机编程题库

题库 > Go > Go 笔试题精选二 练习:33

Go 笔试题精选二

下段代码输出什么? ```go func Test2(t *testing.T) { 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.Printf("key: %d, value: %d \n", k, *v) } } ```

解析:

上述代码输出结果如下:

key: 0, value: 3

key: 1, value: 3

key: 2, value: 3

key: 3, value: 3

for range 循环的时候会创建每个元素的副本,而不是元素的引用,所以 m [key] = &val 取的都是变量 val 的地址,所以最后 map 中的所有元素的值都是变量 val 的地址,因为最后 val 被赋值为 3,所有输出都是 3.

查看笔记

扫码一下
查看教程更方便