go普通指针unsafe.Pointer uintptr互相转换

1680阅读 0评论2020-04-23 nuoyazhou110
分类:Web开发


unsafe.Pointer称为通用指针,官方文档对该类型有四个重要描述:
(1)任何类型的指针都可以被转化为Pointer
(2)Pointer可以被转化为任何类型的指针
(3)uintptr可以被转化为Pointer
(4)Pointer可以被转化为uintptr

点击(此处)折叠或打开

  1. package main

  2. import (
  3.     "fmt"
  4.     "unsafe"
  5. )

  6. func main(){

  7.     a := [4]int{1,2,3,4}
  8.     p1 := unsafe.Pointer(&a)
  9.     p2 := uintptr(p1)
  10.     p3 := p2 + 1 * unsafe.Sizeof(p1)
  11.     p4 := (*int)(unsafe.Pointer(p3))
  12.     *p4 = 8
  13.     fmt.Printf("%p %p %d %d %v \n",&a,p1,p2,unsafe.Sizeof(p1),a)
  14. }
输出:
0xc000060140 0xc000060140 824634114368 8 [1 8 3 4]

上一篇:go并发任务超时控制
下一篇:二叉树的三种遍历方式