码迷,mamicode.com
首页 > 其他好文 > 详细

for range 经典问题

时间:2019-09-23 22:18:11      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:一个   amp   make   地址空间   输出   imp   shell   经典   遍历   

for range 经典问题

  • 问题
package main

import(
    "fmt"
)

type Student struct{
    Age int
    Name string
}

func main(){
    data := make(map[string]*Student)
    students:=[]Student{
        {Age:45,Name:"张三"},
        {Age:90,Name:"李四"},
        {Age:99,Name:"张北海"},
    }
    //range使得指针指向的内部的地址空间不一样
    for i,student := range students{
        fmt.Printf("变量的地址:%x \n",&student)
        fmt.Printf("student的地址:%p \n",&student)
        fmt.Printf("student[i]地址:%p \n",&students[i])
        fmt.Printf("students的地址:%p \n",&students)
        data[student.Name]=&student
    }
    for k,v := range data{
        fmt.Println(k,"=====>",v)
    }
    fmt.Println(data)
}
  • 输出结果
变量的地址:&{2d e5bca0e4b889}
student的地址:0xc000004460
真实的student对应的地址:0xc00007a000
students的地址:0xc000004440
变量的地址:&{5a e69d8ee59b9b}
student的地址:0xc000004460
真实的student对应的地址:0xc00007a018
students的地址:0xc000004440
变量的地址:&{63 e5bca0e58c97e6b5b7}
student的地址:0xc000004460
真实的student对应的地址:0xc00007a030
students的地址:0xc000004440
  • 个人理解(要是理解的不对,请指出,谢谢)

    在该for循环中,range驱动数组内部初始指针走动,每次遍历数组的时候,数组内初始指针都会向下移动。循环结束之后,range使得数组内部的初始指针指向最后一个元素。根据指针的特性,赋给data的value值都是数组中最后一个元素的地址

技术图片

技术图片

技术图片

for range 经典问题

标签:一个   amp   make   地址空间   输出   imp   shell   经典   遍历   

原文地址:https://www.cnblogs.com/MyUniverse/p/11575225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!