[Go] Go语言中的指针运算 →→→→→进入此内容的聊天室

来自 , 2020-06-27, 写在 Go, 查看 144 次.
URL http://www.code666.cn/view/d82d678e
  1. package main
  2.  
  3. import "fmt"
  4. import "unsafe"
  5.  
  6. type Data struct {
  7.     Col1 byte
  8.     Col2 int
  9.     Col3 string
  10.     Col4 int
  11. }
  12.  
  13. func main() {
  14.     var v Data
  15.  
  16.     fmt.Println(unsafe.Sizeof(v))
  17.  
  18.     fmt.Println("----")
  19.  
  20.     fmt.Println(unsafe.Alignof(v.Col1))
  21.     fmt.Println(unsafe.Alignof(v.Col2))
  22.     fmt.Println(unsafe.Alignof(v.Col3))
  23.     fmt.Println(unsafe.Alignof(v.Col4))
  24.  
  25.     fmt.Println("----")
  26.  
  27.     fmt.Println(unsafe.Offsetof(v.Col1))
  28.     fmt.Println(unsafe.Offsetof(v.Col2))
  29.     fmt.Println(unsafe.Offsetof(v.Col3))
  30.     fmt.Println(unsafe.Offsetof(v.Col4))
  31.  
  32.     fmt.Println("----")
  33.  
  34.     v.Col1 = 98
  35.     v.Col2 = 77
  36.     v.Col3 = "1234567890abcdef"
  37.     v.Col4 = 23
  38.  
  39.     fmt.Println(unsafe.Sizeof(v))
  40.  
  41.     fmt.Println("----")
  42.  
  43.     x := unsafe.Pointer(&v)
  44.  
  45.     fmt.Println(*(*byte)(x))
  46.     fmt.Println(*(*int)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col2))))
  47.     fmt.Println(*(*string)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col3))))
  48.     fmt.Println(*(*int)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col4))))
  49. }
  50.  
  51.  
  52. //go/4424

回复 "Go语言中的指针运算"

这儿你可以回复上面这条便签

captcha