golang面试题:能说说uintptr和unsafe.Poin

2020-06-02  本文已影响0人  9號
image

问题

能说说uintptr和unsafe.Pointer的区别吗?

怎么答

举例

package main

import (
    "fmt"
    "unsafe"
)

type W struct {
    b int32
    c int64
}

func main() {
    var w *W = new(W)
    //这时w的变量打印出来都是默认值0,0
    fmt.Println(w.b,w.c)

    //现在我们通过指针运算给b变量赋值为10
    b := unsafe.Pointer(uintptr(unsafe.Pointer(w)) + unsafe.Offsetof(w.b))
    *((*int)(b)) = 10
    //此时结果就变成了10,0
    fmt.Println(w.b,w.c)
}
如果喜欢我的文章,可关注我的公众号:golang小白成长记
上一篇 下一篇

猜你喜欢

热点阅读