美文网首页
Go 如何查看一个变量的内存地址 理解指针问题

Go 如何查看一个变量的内存地址 理解指针问题

作者: 酒深巷子Ya | 来源:发表于2018-11-18 15:35 被阅读54次

    熟悉C语言的同学都知道,查看一个变量的地址在处理指针的相关问题的时候直观重要,在C中直接取地址符& 即可。那么在Go语言中如何查看一个变量的地址,我们使用unsafe.Pointer() 函数来查看一个变量的内存地址。
    举例:
    type Vertex struct {
    X, Y float64
    }
    func (v Vertex) sqrt() float64 {
    return math.Sqrt(v.X * v.X + v.Y * v.Y)
    }

    func (v Vertex) scale(f float64) { //带号 和不带*号的区别 可以从内存地址来看出
    fmt.printf("=======", unsafe.Pointer(v))//v 本身就是指针 存储的就是地址 不用取地址
    v.X = x.X * f
    v.Y = v.Y * f
    }

    func main() {
    v := Vertex{3, 4}
    fmt.printf("=======", unsafe.Pointer(&v))
    v.scale(10)
    fmt.Println(v.sqrt())
    }
    //带号 打印的结果 ====== -%!(EXTRA unsafe.Pointer=0xc00006e070)======%!(EXTRA unsafe.Pointer=0xc00006e070) 相同
    //不带
    号 打印的结果 ======%!(EXTRA unsafe.Pointer=0xc000094060)======%!(EXTRA unsafe.Pointer=0xc000094090) 不同
    去掉*号 在scale()方法中要对 v 进行取地址操作

    相关文章

      网友评论

          本文标题:Go 如何查看一个变量的内存地址 理解指针问题

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