指针的偏移运算

package main

import (
    "fmt"
    "unsafe"
)

type W struct {
    a byte
    b int32
    c int32
}

func main() {
    var w = W{b: 32, c: 64}
    t := unsafe.Pointer(&w)                                             //unsafe.Pointer可以和任何指针类型互相转换
    var c = (*int32)(unsafe.Pointer(uintptr(t) + unsafe.Offsetof(w.a))) //uintptr是唯一可以用来运算的指针,通过uintptr偏移来获取各个元素在内存中的位置,偏移a的位移,就拿到了w.a的指针
    *c = 24
    fmt.Println(w)
}




原文地址:https://www.cnblogs.com/hualou/p/12069812.html