您的位置 首页 golang

golang 中的 unsafe.Pointer

golang的指针类型是不允许直接对指针类型进行运算,保留指针的特点,规避掉由于指针操作不当而引发的各种奇怪问题。但是有些时候确实需要使用到指针运算的时候,就需要使用到unsafe包了。如果不使用unsafe包的时候,是不能进行指针运算的。

uintptr和unsafe.Pointer的区别就是:

unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;

uintptr是go的内置类型,用于指针运算,其底层基于int类型。uintptr不是指针,GC会回收uintptr类型的对象。

unsafe.Sizeof函数返回的就是uintptr类型的值,用来得到一个值应该占用多少个字节空间。

type W struct {

a byte

b int32

c int64

}

var w *W

fmt.Println(unsafe.Sizeof(w))

结果:16

unsafe.Pointer:通用指针类型,用于转换不同类型的指针,不能进行指针运算。用于不同指针类型之间进行 强制类型转换 ,必须将其转化成 uintptr 类型才能进行指针的运算。

import (

“fmt”

“unsafe”

)

func main() {

u := uint32(32)

i := int32(1)

fmt.Println(&u, &i)

p := &i

p = (*int32)(&u)

p = (*int32)(unsafe.Pointer(&u))

fmt.Println(p)

}

更多内容请关注每日编程,每天进步一点。

文章来源:智云一二三科技

文章标题:golang 中的 unsafe.Pointer

文章地址:https://www.zhihuclub.com/97537.shtml

关于作者: 智云科技

热门文章

网站地图