美文网首页
for中的key和values的地址问题

for中的key和values的地址问题

作者: 哆啦在这A梦在哪 | 来源:发表于2020-11-19 09:33 被阅读0次

先来看一段代码

type ak struct {
    num  int
    name string
}

func main() {
    da := make(map[int]*ak)
    data := []ak{{num: 1, name: "aa"}, {num: 2, name: "bb"}, {num: 3, name: "cc"}}
    for _, v := range data {
        da[v.num] = &v
    }

    for i, v := range da {
        log.Println(i, ":", v)
    }
}

他的输出结果是


image.png

是不是感觉很奇怪,为什么会变成一致的呢。
将上述代码的指针使用去除


type ak struct {
    num  int
    name string
}

func main() {
    da := make(map[int]ak)
    data := []ak{{num: 1, name: "aa"}, {num: 2, name: "bb"}, {num: 3, name: "cc"}}
    for _, v := range data {
        da[v.num] = v
    }

    for i, v := range da {
        log.Println(i, ":", v)
    }
}

结果正常


image.png

原因:因为for中的V,他是一个固定的地址,所以不能直接进行获取地址的赋值,同理,也不能直接使用v接受一个值用来更改。

相关文章

网友评论

      本文标题:for中的key和values的地址问题

      本文链接:https://www.haomeiwen.com/subject/zsrkiktx.html