001、GO之指针转换


01、Pointer类型

  unsafe包下,有定义type Pointer *ArbitraryType(任意类型指针),可绕过GO的类型限制,type ArbitraryType int

  1. 任何类型的指针值都可以转换为Pointer。
  2. Pointer可以转换为任何类型的指针值。
  3. uintptr可以转换为Pointer。
  4. Pointer可以转换为uintptr。

02、使用示例

  在math包下,unsafe.go文件中大量使用,例如

  func Float32bits(f float32) uint32 { return *(*uint32)(unsafe.Pointer(&f)) }

  func Float64bits(f float64) uint64 { return *(*uint64)(unsafe.Pointer(&f)) }

03、slice定义,底层为可容纳所有类型的数组指针

type slice struct {
array unsafe.Pointer
len int
cap int
}

04、uintptr定义

  在buildin.go文件中,type uintptr uintptr,uintptr是integer类型,可存放任意长度的指针值。

  此文件只是给预定义标识符添加文档,实际GO语言没有这种语法

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM