go unsafe.Pointer 与 uintptr
https://my.oschina.net/goal/blog/193698
https://my.oschina.net/xinxingegeya/blog/729673
https://my.oschina.net/achun/blog/122540
unsafe.Pointer
是实现定位预读写的内存基础。
(1)任何类型的指针都可以被转化为Pointer
(2)Pointer可以被转化为任何类型的指针
(3)uintptr可以被转化为Pointer
(4)Pointer可以被转化为uintptr
unsafe.Pointer指针指向的真实变量的值,因为我们并不知道变量的具体类型。和普通指针一样,unsafe.Pointer指针也是可以比较的,并且支持和nil常量比较判断是否为空指针。
一个普通的T类型指针可以被转化为unsafe.Pointer类型指针,并且一个unsafe.Pointer类型指针也可以被转回普通的指针,被转回普通的指针类型并不需要和原始的T类型相同。
可以利用unsafe.Pointer操作未导出的变量
可以表示任何可指向可寻址的值的指针。
unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;
uintptr
内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。
uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对象,uintptr类型的目标会被回收。
区别
一个指针值如(*Dog类型的值)可以被转换为一个unsafe.Pointer类型的值,反之亦然
一个uintptr类型的值也可以被转换为一个unsafe.Pointer类型的值,反之亦然
一个指针值无法被直接转换成uintptr类型的值,反之亦然。
上一篇: Unity之运行后的鼠标处理
下一篇: vscode 前端配置