go内存地址

2017-08-17  本文已影响1453人  seven_son

go内存地址

func main() {
    a := 43
    b := &a
    fmt.Println("a - ", a)
    fmt.Println("b - ", b)
}

首先声明了一个int类型的变量a,它的值为0,然后又声明了一个a的引用b,b只是a的一个别名而已,并没有占用内存空间。实际上他们是同一个同西,在内存中占用同样的一个存储单元。

5 go中所有的都是按值传递,对于复杂类型,传的是指针的拷贝

     func main() {
    var m map[int]string = map[int]string{
        0: "0",
        1: "1",
    }
    mm := m
    fmt.Printf("%p\n", &m)  //0xc42002a028
    fmt.Printf("%p\n", &mm) //0xc42002a030
    fmt.Println(m)          // map[0:0 1:1]
    fmt.Println(mm)         //map[1:1 0:0]
    changeMap(m)
    fmt.Printf("%p\n", &m)  //0xc42002a028
    fmt.Printf("%p\n", &mm) //0xc42002a030
    fmt.Println(m)          //map[2:2 0:0 1:1]
    fmt.Println(mm)         //map[0:0 1:1 2:2]
    }
    func changeMap(mmm map[int]string) {
    mmm[2] = "2"
    fmt.Printf("changeMap func %p\n", mmm) //changeMap func 0xc420014150
   }

直接传指针 也是传指针的拷贝

func main() {
    var m map[int]string = map[int]string{
        0: "0",
        1: "1",
    }
    mm := m
    fmt.Printf("%p\n", &m)  //0xc42002a028
    fmt.Printf("%p\n", &mm) //0xc42002a030
    fmt.Println(m)          // map[0:0 1:1]
    fmt.Println(mm)         //map[1:1 0:0]
    changeMap(&mm)
    fmt.Printf("%p\n", &m)  //0xc42002a028
    fmt.Printf("%p\n", &mm) //0xc42002a030
    fmt.Println(m)          //map[2:2 0:0 1:1]
    fmt.Println(mm)         //map[0:0 1:1 2:2]
}
func changeMap(mmm *map[int]string) {
    mmm = nil
    fmt.Printf("changeMap func %p\n", mmm) //changeMap func 0xc420014150
}
上一篇 下一篇

猜你喜欢

热点阅读