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

嗯,这道题的结果是

0 -> 3
1 -> 3
2 -> 3
3 -> 3

因为for range 循环的时候会将遍历的元素赋值给一个临时变量即val,尽管每次循环的过程中val都有不同的取值,但在for循环语句内,它自始自终都是同一个变量,因此它的地址是不会发生改变的,所以字典m中的键值对实际都指向同一个地址,而这个地址最后被赋值为3。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NOTE:文章中的代码缩进不知道怎么搞,直接粘贴使用会报错 学习地址 Python高级特征 切片Slice 作用对...
    fangmusan阅读 246评论 0 0
  • 一、认识python 1.常用快捷键(不只在python中有效): Ctrl+/ 添加注释/取消注释 (尽量注释自...
    雨雨雨90阅读 735评论 0 0
  • 一、基本知识    1.python属于解释型语言;解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相...
    我才是鳄鱼宝宝阅读 278评论 0 0
  • Day 2 基础语法 1. 注释 1.1 什么是注释 注释是代码中不参与编译执行的部分,专门用来对程序解释和说明...
    晓晓_007f阅读 84评论 0 0
  • 听了5遍樊登与古典老师说《跃迁》的解读音频,我感觉这本书还是没吃透,相信以后还得再听读多几遍,先来总结下现在的新感...
    海南小帅阅读 179评论 2 6