首页 > 其他分享 >for循环的坑——误用for循环中定义的变量

for循环的坑——误用for循环中定义的变量

时间:2022-12-08 09:34:23浏览次数:54  
标签:map slice 变量 val 误用 int range 循环 key

下面这段代码输出什么,说明原因。

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)
	}
}

执行结果:

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

正确的书写方法:

func main() {

    slice := []int{0,1,2,3}
    m := make(map[int]*int)

    for key,val := range slice {
        value := val
        m[key] = &value
    }

    for k,v := range m {
        fmt.Println(k,"===>",*v)
    }
}

标签:map,slice,变量,val,误用,int,range,循环,key
From: https://www.cnblogs.com/cosmos-wong/p/16965185.html

相关文章