go学习笔记--unsafe.Pointer

1、原理及使用规则

unsafe.Pointer源码就两行:

type ArbitraryType int //表示任何类型
type Pointer *ArbitraryType //表示任何类型的指针

unsafe.Pointer的源码注释还提供了关于unsafe.Pointer的四点重要的使用规则:

1、Go语言常规的任何类型的指针都可以转化为unsafe.Pointer类型
2、unsafe.Pointer类型可以转化为Go语言常规的任何类型的指针。
3、uintptr这个类型可以转化为unsafe.Pointer
4、unsafe.Pointer可以转化为uintptr

uintptr是啥?
在这里插入图片描述
注意看uintptr的位置,和int以及uint在一个包内,你可以认为uintptr与它们"同类",只不过是指针的专属而已,但是你想自己定义用也能用。

对于unsafe.Pointer,多用于Go的编译时期;由于它可以绕过类型系统直接去访问内存,所以它用起来效率会比较高,但是官方的态度是不太建议使用的,因为不太安全。
在这里插入图片描述

2、unsafe.Pointer的使用

(1)go语言是强类型语言,不能直接强转,只有底层的基本类型是一致的才可以进行强转。

type kkk int
var num int
num = 111
//这时的强转是允许的
num2:=kkk(num)

(2)使用unsafe.Pointer进行类型强转

var num1 int32
var num2 uint32
num1 = 111
num2 = *(*uint32)(unsafe.Pointer(&num1))

学习链接:https://blog.csdn.net/i6448038/article/details/105259787
https://blog.csdn.net/cbmljs/article/details/82982539

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值