版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tongwensenyouxiang/article/details/88416265
现学现卖,如有错误欢迎纠正和讨论
简单来说就是包unsafe提供了下面两条重要的指针相关的功能:
1.unsafe.Pointer是一个指针类型,指向的值不能被解析,只说明这是一个指针,但是指向什么的不知道,任何类型的指针都可以被转换为unsafe.Pointer类型
2.uintptr 是一个整数类型,这个整数的宽度足以用来存储一个指针类型数据,用来计算
动起手来码代码(下面代码可以复制的呦)
a := uint32(32)
b := int32(1)
fmt.Println(&a, &b)
//然后我要计算
c := &b
c = &a
c = (*int32)(&a)
fmt.Println(c)
我使用的工具是GoLand 他给我标红了并提示了一句话:Cannot convert expression of type *uint32 to type *int32
英语不好呀,翻译一下
哦,表达式转换无效,嗯,很明确。
切入正题 引入unsafe.Pointer (下面代码可以复制的呦)
import (
"fmt"
_ "unsafe"
)
a := uint32(32)
b := int32(1)
fmt.Println(&a, &b)
//然后我要计算
c := &b
c = (*int32)(unsafe.Pointer(&a))
fmt.Println(c)
提示报错倒是不见了,嘿嘿嘿。
运行试试
呦,Good boy