unsafe.pointer
可支持操作内存;
可以转换到任意类型指针
非安全的,不建议使用
unsafe.Pointer() 任意转换指针类型,并可进行指针运算
其他类型的指针只能转化为unsafe.Pointer,也只有unsafe.Pointer才能转化成任意类型的指针
只有uintptr才支持加减操作,而uintptr是一个非负整数,表示地址值,没有类型信息,以字节为单位
实际操作:获取一个字符串第二个字符的地址和值
var s = "abc"
var strHeader = (*reflect.StringHeader)(unsafe.Pointer(&s))
var res = (*byte)(unsafe.Pointer(strHeader.Data)) //获取字符串第一个字符的地址
log.Printf("strHeader.Data = %c", *res)
var ress = (*byte)(unsafe.Pointer(strHeader.Data + uintptr(1))) //获取字符串第一个字符的地址
log.Printf("strHeader.Data = %c", *ress)
//var ssss uintptr = 0xc000088fc0
//log.Println(*(*byte)(unsafe.Pointer(ssss)))最后更新于
这有帮助吗?