• golang slice a 的地址和a[0]的地址不一样


    https://studygolang.com/topics/10399

    -------------------

    var a = []int{1,2,3}
    fmt.Printf("%p
    ", &a)
    b :=a
    fmt.Printf("%p
    ",&b) // 问题1、为什么b的地址跟a不同,他们不是共享底层数组吗?
    b = append(b,0)
    fmt.Printf("%p
    ", &b) // 问题2、为什么b的地址维持不变?append时b的长度不够应该重新分配了内存空间吧
    fmt.Println(a)
    fmt.Println(b)

    --------------

    谢谢,这两个问题我已经弄清楚了

    问题1:

    b:=a //把a赋值给b,系统会给b分配一个地址,指向的底层数组跟a是一样的 fmt.Printf("%p ",&b) //输出的是b变量本身的地址,而不是底层数组的地址,如果 fmt.Printf("%p",&b[0])打印,发现结果和&a[0]是一样的的,证明a和b共享底层数组内存

    问题2:

    b=append(b,0) fmt.Printf("%p ",&b) //b变量的地址没有变,而是b指向的底层数组内存地址变了,如果 fmt.Printf("%p",&b[0])打印,发现append操作前后是不一样的。

  • 相关阅读:
    java中文件的读取和写入
    ==与equal在java中应用的感悟
    Gson心得小笔记
    几种排序的算法
    HttpClient的使用方法
    StringBuffer
    laravel5.5容器
    常用会话管理方式
    css一些事儿
    关于时间的梳理
  • 原文地址:https://www.cnblogs.com/oxspirt/p/14705834.html
Copyright © 2020-2023  润新知