2 回答
TA贡献1810条经验 获得超5个赞
不。来自Go FAQ:
为什么没有指针算法?
安全。如果没有指针算术,就有可能创建一种永远无法派生出错误成功的非法地址的语言。编译器和硬件技术已经发展到使用数组索引的循环可以与使用指针算法的循环一样高效。此外,缺乏指针算法可以简化垃圾收集器的实现。
话虽如此,您可以通过使用该unsafe包来解决这个问题,但不要这样做:
package main
import "fmt"
import "unsafe"
func main() {
vals := []int{10, 20, 30, 40}
start := unsafe.Pointer(&vals[0])
size := unsafe.Sizeof(int(0))
for i := 0; i < len(vals); i++ {
item := *(*int)(unsafe.Pointer(uintptr(start) + size*uintptr(i)))
fmt.Println(item)
}
}
https://play.golang.org/p/QCHEQqy6Lg
TA贡献1811条经验 获得超6个赞
从 Go 1.17 开始,我们现在有了unsafe.Add,这让它变得更容易了:
package main
import (
"unsafe"
)
func main() {
vals := []int{10, 20, 30, 40}
ptrStart := unsafe.Pointer(&vals[0])
itemSize := unsafe.Sizeof(vals[0])
for i := 0; i < len(vals); i++ {
item := *(*int)(unsafe.Add(ptrStart, uintptr(i)*itemSize))
println(item)
}
}
- 2 回答
- 0 关注
- 241 浏览
添加回答
举报