*T
,表示是“一个指向T类型变量的指针”。unsafe.Pointer是特别定义的一种指针类型(译注:类似C语言中的void*
类型的指针),它可以包含任意类型变量的地址。当然,我们不可以直接通过*p
来获取unsafe.Pointer指针指向的真实变量的值,因为我们并不知道变量的具体类型。和普通指针一样,unsafe.Pointer指针也是可以比较的,并且支持和nil常量比较判断是否为空指针。*T
类型指针可以被转化为unsafe.Pointer类型指针,并且一个unsafe.Pointer类型指针也可以被转回普通的指针,被转回普通的指针类型并不需要和原始的*T
类型相同。通过将*float64
类型指针转化为*uint64
类型指针,我们可以查看一个浮点数变量的位模式。*int16
类型指针,然后通过该指针更新x.b:&x.b
地址。第三个向之前无效地址空间的赋值语句将彻底摧毁整个程序!new
新创建的变量,因此该语句执行完成之后,垃圾收集器有权马上回收其内存空间,所以返回的pT将是无效的地址。